//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2022 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

import Foundation
import SotoCore

extension Route53 {
    // MARK: Enums

    public enum AccountLimitType: String, CustomStringConvertible, Codable, _SotoSendable {
        case maxHealthChecksByOwner = "MAX_HEALTH_CHECKS_BY_OWNER"
        case maxHostedZonesByOwner = "MAX_HOSTED_ZONES_BY_OWNER"
        case maxReusableDelegationSetsByOwner = "MAX_REUSABLE_DELEGATION_SETS_BY_OWNER"
        case maxTrafficPoliciesByOwner = "MAX_TRAFFIC_POLICIES_BY_OWNER"
        case maxTrafficPolicyInstancesByOwner = "MAX_TRAFFIC_POLICY_INSTANCES_BY_OWNER"
        public var description: String { return self.rawValue }
    }

    public enum ChangeAction: String, CustomStringConvertible, Codable, _SotoSendable {
        case create = "CREATE"
        case delete = "DELETE"
        case upsert = "UPSERT"
        public var description: String { return self.rawValue }
    }

    public enum ChangeStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case insync = "INSYNC"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum CidrCollectionChangeAction: String, CustomStringConvertible, Codable, _SotoSendable {
        case deleteIfExists = "DELETE_IF_EXISTS"
        case put = "PUT"
        public var description: String { return self.rawValue }
    }

    public enum CloudWatchRegion: String, CustomStringConvertible, Codable, _SotoSendable {
        case afSouth1 = "af-south-1"
        case apEast1 = "ap-east-1"
        case apNortheast1 = "ap-northeast-1"
        case apNortheast2 = "ap-northeast-2"
        case apNortheast3 = "ap-northeast-3"
        case apSouth1 = "ap-south-1"
        case apSouth2 = "ap-south-2"
        case apSoutheast1 = "ap-southeast-1"
        case apSoutheast2 = "ap-southeast-2"
        case apSoutheast3 = "ap-southeast-3"
        case caCentral1 = "ca-central-1"
        case cnNorth1 = "cn-north-1"
        case cnNorthwest1 = "cn-northwest-1"
        case euCentral1 = "eu-central-1"
        case euCentral2 = "eu-central-2"
        case euNorth1 = "eu-north-1"
        case euSouth1 = "eu-south-1"
        case euSouth2 = "eu-south-2"
        case euWest1 = "eu-west-1"
        case euWest2 = "eu-west-2"
        case euWest3 = "eu-west-3"
        case meCentral1 = "me-central-1"
        case meSouth1 = "me-south-1"
        case saEast1 = "sa-east-1"
        case usEast1 = "us-east-1"
        case usEast2 = "us-east-2"
        case usGovEast1 = "us-gov-east-1"
        case usGovWest1 = "us-gov-west-1"
        case usIsoEast1 = "us-iso-east-1"
        case usIsoWest1 = "us-iso-west-1"
        case usIsobEast1 = "us-isob-east-1"
        case usWest1 = "us-west-1"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    public enum ComparisonOperator: String, CustomStringConvertible, Codable, _SotoSendable {
        case greaterThanOrEqualToThreshold = "GreaterThanOrEqualToThreshold"
        case greaterThanThreshold = "GreaterThanThreshold"
        case lessThanOrEqualToThreshold = "LessThanOrEqualToThreshold"
        case lessThanThreshold = "LessThanThreshold"
        public var description: String { return self.rawValue }
    }

    public enum HealthCheckRegion: String, CustomStringConvertible, Codable, _SotoSendable {
        case apNortheast1 = "ap-northeast-1"
        case apSoutheast1 = "ap-southeast-1"
        case apSoutheast2 = "ap-southeast-2"
        case euWest1 = "eu-west-1"
        case saEast1 = "sa-east-1"
        case usEast1 = "us-east-1"
        case usWest1 = "us-west-1"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    public enum HealthCheckType: String, CustomStringConvertible, Codable, _SotoSendable {
        case calculated = "CALCULATED"
        case cloudwatchMetric = "CLOUDWATCH_METRIC"
        case http = "HTTP"
        case httpStrMatch = "HTTP_STR_MATCH"
        case https = "HTTPS"
        case httpsStrMatch = "HTTPS_STR_MATCH"
        case recoveryControl = "RECOVERY_CONTROL"
        case tcp = "TCP"
        public var description: String { return self.rawValue }
    }

    public enum HostedZoneLimitType: String, CustomStringConvertible, Codable, _SotoSendable {
        case maxRrsetsByZone = "MAX_RRSETS_BY_ZONE"
        case maxVpcsAssociatedByZone = "MAX_VPCS_ASSOCIATED_BY_ZONE"
        public var description: String { return self.rawValue }
    }

    public enum InsufficientDataHealthStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case healthy = "Healthy"
        case lastKnownStatus = "LastKnownStatus"
        case unhealthy = "Unhealthy"
        public var description: String { return self.rawValue }
    }

    public enum RRType: String, CustomStringConvertible, Codable, _SotoSendable {
        case a = "A"
        case aaaa = "AAAA"
        case caa = "CAA"
        case cname = "CNAME"
        case ds = "DS"
        case mx = "MX"
        case naptr = "NAPTR"
        case ns = "NS"
        case ptr = "PTR"
        case soa = "SOA"
        case spf = "SPF"
        case srv = "SRV"
        case txt = "TXT"
        public var description: String { return self.rawValue }
    }

    public enum ResettableElementName: String, CustomStringConvertible, Codable, _SotoSendable {
        case childHealthChecks = "ChildHealthChecks"
        case fullyQualifiedDomainName = "FullyQualifiedDomainName"
        case regions = "Regions"
        case resourcePath = "ResourcePath"
        public var description: String { return self.rawValue }
    }

    public enum ResourceRecordSetFailover: String, CustomStringConvertible, Codable, _SotoSendable {
        case primary = "PRIMARY"
        case secondary = "SECONDARY"
        public var description: String { return self.rawValue }
    }

    public enum ResourceRecordSetRegion: String, CustomStringConvertible, Codable, _SotoSendable {
        case afSouth1 = "af-south-1"
        case apEast1 = "ap-east-1"
        case apNortheast1 = "ap-northeast-1"
        case apNortheast2 = "ap-northeast-2"
        case apNortheast3 = "ap-northeast-3"
        case apSouth1 = "ap-south-1"
        case apSouth2 = "ap-south-2"
        case apSoutheast1 = "ap-southeast-1"
        case apSoutheast2 = "ap-southeast-2"
        case apSoutheast3 = "ap-southeast-3"
        case caCentral1 = "ca-central-1"
        case cnNorth1 = "cn-north-1"
        case cnNorthwest1 = "cn-northwest-1"
        case euCentral1 = "eu-central-1"
        case euCentral2 = "eu-central-2"
        case euNorth1 = "eu-north-1"
        case euSouth1 = "eu-south-1"
        case euSouth2 = "eu-south-2"
        case euWest1 = "eu-west-1"
        case euWest2 = "eu-west-2"
        case euWest3 = "eu-west-3"
        case meCentral1 = "me-central-1"
        case meSouth1 = "me-south-1"
        case saEast1 = "sa-east-1"
        case usEast1 = "us-east-1"
        case usEast2 = "us-east-2"
        case usWest1 = "us-west-1"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    public enum ReusableDelegationSetLimitType: String, CustomStringConvertible, Codable, _SotoSendable {
        case maxZonesByReusableDelegationSet = "MAX_ZONES_BY_REUSABLE_DELEGATION_SET"
        public var description: String { return self.rawValue }
    }

    public enum Statistic: String, CustomStringConvertible, Codable, _SotoSendable {
        case average = "Average"
        case maximum = "Maximum"
        case minimum = "Minimum"
        case sampleCount = "SampleCount"
        case sum = "Sum"
        public var description: String { return self.rawValue }
    }

    public enum TagResourceType: String, CustomStringConvertible, Codable, _SotoSendable {
        case healthcheck
        case hostedzone
        public var description: String { return self.rawValue }
    }

    public enum VPCRegion: String, CustomStringConvertible, Codable, _SotoSendable {
        case afSouth1 = "af-south-1"
        case apEast1 = "ap-east-1"
        case apNortheast1 = "ap-northeast-1"
        case apNortheast2 = "ap-northeast-2"
        case apNortheast3 = "ap-northeast-3"
        case apSouth1 = "ap-south-1"
        case apSouth2 = "ap-south-2"
        case apSoutheast1 = "ap-southeast-1"
        case apSoutheast2 = "ap-southeast-2"
        case apSoutheast3 = "ap-southeast-3"
        case caCentral1 = "ca-central-1"
        case cnNorth1 = "cn-north-1"
        case euCentral1 = "eu-central-1"
        case euCentral2 = "eu-central-2"
        case euNorth1 = "eu-north-1"
        case euSouth1 = "eu-south-1"
        case euSouth2 = "eu-south-2"
        case euWest1 = "eu-west-1"
        case euWest2 = "eu-west-2"
        case euWest3 = "eu-west-3"
        case meCentral1 = "me-central-1"
        case meSouth1 = "me-south-1"
        case saEast1 = "sa-east-1"
        case usEast1 = "us-east-1"
        case usEast2 = "us-east-2"
        case usGovEast1 = "us-gov-east-1"
        case usGovWest1 = "us-gov-west-1"
        case usIsoEast1 = "us-iso-east-1"
        case usIsoWest1 = "us-iso-west-1"
        case usIsobEast1 = "us-isob-east-1"
        case usWest1 = "us-west-1"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AccountLimit: AWSDecodableShape {
        /// The limit that you requested. Valid values include the following:
        ///
        /// 				            MAX_HEALTH_CHECKS_BY_OWNER: The maximum
        /// 					number of health checks that you can create using the current account.
        ///
        /// 				            MAX_HOSTED_ZONES_BY_OWNER: The maximum number
        /// 					of hosted zones that you can create using the current account.
        ///
        /// 				            MAX_REUSABLE_DELEGATION_SETS_BY_OWNER: The
        /// 					maximum number of reusable delegation sets that you can create using the current
        /// 					account.
        ///
        /// 				            MAX_TRAFFIC_POLICIES_BY_OWNER: The maximum
        /// 					number of traffic policies that you can create using the current account.
        ///
        /// 				            MAX_TRAFFIC_POLICY_INSTANCES_BY_OWNER: The
        /// 					maximum number of traffic policy instances that you can create using the current
        /// 					account. (Traffic policy instances are referred to as traffic flow policy
        /// 					records in the Amazon Route 53 console.)
        ///
        public let type: AccountLimitType
        /// The current value for the limit that is specified by Type.
        public let value: Int64

        public init(type: AccountLimitType, value: Int64) {
            self.type = type
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case type = "Type"
            case value = "Value"
        }
    }

    public struct ActivateKeySigningKeyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId")),
            AWSMemberEncoding(label: "name", location: .uri("Name"))
        ]

        /// A unique string used to identify a hosted zone.
        public let hostedZoneId: String
        /// A string used to identify a key-signing key (KSK). Name can include
        /// 			numbers, letters, and underscores (_). Name must be unique for each
        /// 			key-signing key in the same hosted zone.
        public let name: String

        public init(hostedZoneId: String, name: String) {
            self.hostedZoneId = hostedZoneId
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, min: 3)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ActivateKeySigningKeyResponse: AWSDecodableShape {
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct AlarmIdentifier: AWSEncodableShape & AWSDecodableShape {
        /// The name of the CloudWatch alarm that you want Amazon Route 53 health checkers to use
        /// 			to determine whether this health check is healthy.
        ///
        /// 			         Route 53 supports CloudWatch alarms with the following features:
        ///
        /// 					             Standard-resolution metrics. High-resolution metrics aren't supported. For
        /// 						more information, see High-Resolution Metrics in the Amazon CloudWatch User
        /// 							Guide.
        ///
        /// 					             Statistics: Average, Minimum, Maximum, Sum, and SampleCount. Extended
        /// 						statistics aren't supported.
        ///
        ///
        public let name: String
        /// For the CloudWatch alarm that you want Route 53 health checkers to use to determine
        /// 			whether this health check is healthy, the region that the alarm was created in.
        /// 		       For the current list of CloudWatch regions, see Amazon CloudWatch endpoints and
        /// 				quotas in the Amazon Web Services General
        /// 			Reference.
        public let region: CloudWatchRegion

        public init(name: String, region: CloudWatchRegion) {
            self.name = name
            self.region = region
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case region = "Region"
        }
    }

    public struct AliasTarget: AWSEncodableShape & AWSDecodableShape {
        ///  Alias resource record sets only: The value that you specify
        /// 			depends on where you want to route queries:
        /// 		        Amazon API Gateway custom regional APIs and edge-optimized APIs
        /// 					          Specify the applicable domain name for your API. You can get the
        /// 						applicable value using the CLI command get-domain-names:
        ///
        /// 							              For regional APIs, specify the value of
        /// 									regionalDomainName.
        ///
        /// 							              For edge-optimized APIs, specify the value of
        /// 									distributionDomainName. This is the name of the
        /// 								associated CloudFront distribution, such as
        /// 									da1b2c3d4e5.cloudfront.net.
        ///
        ///
        /// 						            The name of the record that you're creating must match a custom domain
        /// 							name for your API, such as api.example.com.
        ///
        /// 				         Amazon Virtual Private Cloud interface VPC endpoint
        /// 					          Enter the API endpoint for the interface endpoint, such as
        /// 							vpce-123456789abcdef01-example-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com.
        /// 						For edge-optimized APIs, this is the domain name for the corresponding
        /// 						CloudFront distribution. You can get the value of DnsName using
        /// 						the CLI command describe-vpc-endpoints.
        /// 				         CloudFront distribution
        /// 					          Specify the domain name that CloudFront assigned when you created your
        /// 						distribution.
        /// 					          Your CloudFront distribution must include an alternate domain name that
        /// 						matches the name of the resource record set. For example, if the name of the
        /// 						resource record set is acme.example.com, your
        /// 						CloudFront distribution must include acme.example.com
        /// 						as one of the alternate domain names. For more information, see Using Alternate
        /// 							Domain Names (CNAMEs) in the Amazon CloudFront
        /// 							Developer Guide.
        /// 					          You can't create a resource record set in a private hosted zone to route
        /// 						traffic to a CloudFront distribution.
        ///
        /// 						            For failover alias records, you can't specify a CloudFront
        /// 							distribution for both the primary and secondary records. A distribution
        /// 							must include an alternate domain name that matches the name of the
        /// 							record. However, the primary and secondary records have the same name,
        /// 							and you can't include the same alternate domain name in more than one
        /// 							distribution.
        ///
        /// 				         Elastic Beanstalk environment
        /// 					          If the domain name for your Elastic Beanstalk environment includes the
        /// 						region that you deployed the environment in, you can create an alias record
        /// 						that routes traffic to the environment. For example, the domain name
        /// 								my-environment.us-west-2.elasticbeanstalk.com
        /// 						is a regionalized domain name.
        ///
        /// 						            For environments that were created before early 2016, the domain name
        /// 							doesn't include the region. To route traffic to these environments, you
        /// 							must create a CNAME record instead of an alias record. Note that you
        /// 							can't create a CNAME record for the root domain name. For example, if
        /// 							your domain name is example.com, you can create a record that routes
        /// 							traffic for acme.example.com to your Elastic Beanstalk environment, but
        /// 							you can't create a record that routes traffic for example.com to your
        /// 							Elastic Beanstalk environment.
        ///
        /// 					          For Elastic Beanstalk environments that have regionalized subdomains,
        /// 						specify the CNAME attribute for the environment. You can use
        /// 						the following methods to get the value of the CNAME attribute:
        ///
        /// 							               Amazon Web Services Management Console: For information about
        /// 								how to get the value by using the console, see Using Custom
        /// 									Domains with Elastic Beanstalk in the
        /// 										Elastic Beanstalk Developer
        /// 								Guide.
        ///
        /// 							               Elastic Beanstalk API: Use the
        /// 									DescribeEnvironments action to get the value of the
        /// 									CNAME attribute. For more information, see DescribeEnvironments in the Elastic Beanstalk API Reference.
        ///
        /// 							               CLI: Use the
        /// 									describe-environments command to get the value of
        /// 								the CNAME attribute. For more information, see describe-environments in the CLI Command Reference.
        ///
        /// 				         ELB load balancer
        /// 					          Specify the DNS name that is associated with the load balancer. Get the
        /// 						DNS name by using the Amazon Web Services Management Console, the ELB API, or the CLI.
        ///
        /// 							               Amazon Web Services Management Console: Go to the
        /// 								EC2 page, choose Load Balancers in
        /// 								the navigation pane, choose the load balancer, choose the Description tab, and get the value of the
        /// 									DNS name field.
        /// 							              If you're routing traffic to a Classic Load Balancer, get the
        /// 								value that begins with dualstack.
        /// 								If you're routing traffic to another type of load balancer, get the
        /// 								value that applies to the record type, A or AAAA.
        ///
        /// 							               Elastic Load Balancing API: Use
        /// 									DescribeLoadBalancers to get the value of
        /// 									DNSName. For more information, see the applicable
        /// 								guide:
        ///
        /// 									                  Classic Load Balancers: DescribeLoadBalancers
        ///
        ///
        /// 									                  Application and Network Load Balancers: DescribeLoadBalancers
        ///
        ///
        /// 							               CLI: Use
        /// 									describe-load-balancers to get the value of
        /// 									DNSName. For more information, see the applicable
        /// 								guide:
        ///
        /// 									                  Classic Load Balancers: describe-load-balancers
        ///
        /// 									                  Application and Network Load Balancers: describe-load-balancers
        ///
        ///
        /// 				         Global Accelerator accelerator
        /// 					          Specify the DNS name for your accelerator:
        ///
        /// 							               Global Accelerator API: To get
        /// 								the DNS name, use DescribeAccelerator.
        ///
        /// 							               CLI: To get the
        /// 								DNS name, use describe-accelerator.
        ///
        /// 				         Amazon S3 bucket that is configured as a static website
        /// 					          Specify the domain name of the Amazon S3 website endpoint that you created
        /// 						the bucket in, for example, s3-website.us-east-2.amazonaws.com.
        /// 						For more information about valid values, see the table Amazon S3
        /// 							Website Endpoints in the Amazon Web Services General
        /// 							Reference. For more information about using S3 buckets for
        /// 						websites, see Getting Started
        /// 							with Amazon Route 53 in the Amazon Route 53 Developer
        /// 							Guide.
        /// 				         Another Route 53 resource record set
        /// 					          Specify the value of the Name element for a resource record
        /// 						set in the current hosted zone.
        ///
        /// 						            If you're creating an alias record that has the same name as the
        /// 							hosted zone (known as the zone apex), you can't specify the domain name
        /// 							for a record for which the value of Type is
        /// 								CNAME. This is because the alias record must have the
        /// 							same type as the record that you're routing traffic to, and creating a
        /// 							CNAME record for the zone apex isn't supported even for an alias
        /// 							record.
        ///
        ///
        public let dnsName: String
        ///  Applies only to alias, failover alias, geolocation alias, latency alias, and
        /// 				weighted alias resource record sets: When
        /// 				EvaluateTargetHealth is true, an alias resource record set
        /// 			inherits the health of the referenced Amazon Web Services resource, such as an ELB load
        /// 			balancer or another resource record set in the hosted zone.
        /// 		       Note the following:
        /// 		        CloudFront distributions
        /// 					          You can't set EvaluateTargetHealth to true when
        /// 						the alias target is a CloudFront distribution.
        /// 				         Elastic Beanstalk environments that have regionalized subdomains
        /// 					          If you specify an Elastic Beanstalk environment in DNSName
        /// 						and the environment contains an ELB load balancer, Elastic Load Balancing
        /// 						routes queries only to the healthy Amazon EC2 instances that are registered
        /// 						with the load balancer. (An environment automatically contains an ELB load
        /// 						balancer if it includes more than one Amazon EC2 instance.) If you set
        /// 							EvaluateTargetHealth to true and either no
        /// 						Amazon EC2 instances are healthy or the load balancer itself is unhealthy,
        /// 						Route 53 routes queries to other available resources that are healthy, if
        /// 						any.
        /// 					          If the environment contains a single Amazon EC2 instance, there are no
        /// 						special requirements.
        /// 				         ELB load balancers
        /// 					          Health checking behavior depends on the type of load balancer:
        ///
        /// 							               Classic Load Balancers: If you
        /// 								specify an ELB Classic Load Balancer in DNSName,
        /// 								Elastic Load Balancing routes queries only to the healthy Amazon EC2
        /// 								instances that are registered with the load balancer. If you set
        /// 									EvaluateTargetHealth to true and
        /// 								either no EC2 instances are healthy or the load balancer itself is
        /// 								unhealthy, Route 53 routes queries to other resources.
        ///
        /// 							               Application and Network Load
        /// 									Balancers: If you specify an ELB Application or
        /// 								Network Load Balancer and you set EvaluateTargetHealth
        /// 								to true, Route 53 routes queries to the load balancer
        /// 								based on the health of the target groups that are associated with
        /// 								the load balancer:
        ///
        /// 									                  For an Application or Network Load Balancer to be
        /// 										considered healthy, every target group that contains targets
        /// 										must contain at least one healthy target. If any target
        /// 										group contains only unhealthy targets, the load balancer is
        /// 										considered unhealthy, and Route 53 routes queries to other
        /// 										resources.
        ///
        /// 									                  A target group that has no registered targets is
        /// 										considered unhealthy.
        ///
        ///
        ///
        /// 						            When you create a load balancer, you configure settings for Elastic
        /// 							Load Balancing health checks; they're not Route 53 health checks, but
        /// 							they perform a similar function. Do not create Route 53 health checks
        /// 							for the EC2 instances that you register with an ELB load balancer.
        ///
        ///
        /// 				         S3 buckets
        /// 					          There are no special requirements for setting
        /// 							EvaluateTargetHealth to true when the alias
        /// 						target is an S3 bucket.
        /// 				         Other records in the same hosted zone
        /// 					          If the Amazon Web Services resource that you specify in
        /// 							DNSName is a record or a group of records (for example, a
        /// 						group of weighted records) but is not another alias record, we recommend
        /// 						that you associate a health check with all of the records in the alias
        /// 						target. For more information, see What Happens When You Omit Health Checks? in the
        /// 							Amazon Route 53 Developer Guide.
        ///
        /// 		       For more information and examples, see Amazon Route 53 Health Checks
        /// 				and DNS Failover in the Amazon Route 53 Developer
        /// 			Guide.
        public let evaluateTargetHealth: Bool
        ///  Alias resource records sets only: The value used depends on where
        /// 			you want to route traffic:
        /// 		        Amazon API Gateway custom regional APIs and edge-optimized APIs
        /// 					          Specify the hosted zone ID for your API. You can get the applicable value
        /// 						using the CLI command get-domain-names:
        ///
        /// 							              For regional APIs, specify the value of
        /// 									regionalHostedZoneId.
        ///
        /// 							              For edge-optimized APIs, specify the value of
        /// 									distributionHostedZoneId.
        ///
        /// 				         Amazon Virtual Private Cloud interface VPC endpoint
        /// 					          Specify the hosted zone ID for your interface endpoint. You can get the
        /// 						value of HostedZoneId using the CLI command
        /// 							describe-vpc-endpoints.
        /// 				         CloudFront distribution
        /// 					          Specify Z2FDTNDATAQYW2.
        ///
        /// 						            Alias resource record sets for CloudFront can't be created in a
        /// 							private zone.
        ///
        /// 				         Elastic Beanstalk environment
        /// 					          Specify the hosted zone ID for the region that you created the environment
        /// 						in. The environment must have a regionalized subdomain. For a list of
        /// 						regions and the corresponding hosted zone IDs, see Elastic Beanstalk endpoints and quotas in the the
        /// 							Amazon Web Services General Reference.
        /// 				         ELB load balancer
        /// 					          Specify the value of the hosted zone ID for the load balancer. Use the
        /// 						following methods to get the hosted zone ID:
        ///
        /// 							               Elastic Load Balancing endpoints and quotas topic in
        /// 								the Amazon Web Services General Reference: Use
        /// 								the value that corresponds with the region that you created your
        /// 								load balancer in. Note that there are separate columns for
        /// 								Application and Classic Load Balancers and for Network Load
        /// 								Balancers.
        ///
        /// 							               Amazon Web Services Management Console: Go to the
        /// 								Amazon EC2 page, choose Load
        /// 									Balancers in the navigation pane, select the load
        /// 								balancer, and get the value of the Hosted
        /// 									zone field on the Description tab.
        ///
        /// 							               Elastic Load Balancing API: Use
        /// 									DescribeLoadBalancers to get the applicable value.
        /// 								For more information, see the applicable guide:
        ///
        /// 									                  Classic Load Balancers: Use DescribeLoadBalancers to get the value of
        /// 											CanonicalHostedZoneNameId.
        ///
        /// 									                  Application and Network Load Balancers: Use DescribeLoadBalancers to get the value of
        /// 											CanonicalHostedZoneId.
        ///
        ///
        /// 							               CLI: Use
        /// 									describe-load-balancers to get the applicable
        /// 								value. For more information, see the applicable guide:
        ///
        /// 									                  Classic Load Balancers: Use describe-load-balancers to get the value of
        /// 											CanonicalHostedZoneNameId.
        ///
        /// 									                  Application and Network Load Balancers: Use describe-load-balancers to get the value of
        /// 											CanonicalHostedZoneId.
        ///
        ///
        /// 				         Global Accelerator accelerator
        /// 					          Specify Z2BJ6XQ5FK7U4H.
        /// 				         An Amazon S3 bucket configured as a static website
        /// 					          Specify the hosted zone ID for the region that you created the bucket in.
        /// 						For more information about valid values, see the table Amazon S3
        /// 							Website Endpoints in the Amazon Web Services General
        /// 							Reference.
        /// 				         Another Route 53 resource record set in your hosted zone
        /// 					          Specify the hosted zone ID of your hosted zone. (An alias resource record
        /// 						set can't reference a resource record set in a different hosted
        /// 						zone.)
        ///
        public let hostedZoneId: String

        public init(dnsName: String, evaluateTargetHealth: Bool, hostedZoneId: String) {
            self.dnsName = dnsName
            self.evaluateTargetHealth = evaluateTargetHealth
            self.hostedZoneId = hostedZoneId
        }

        public func validate(name: String) throws {
            try self.validate(self.dnsName, name: "dnsName", parent: name, max: 1024)
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: String, CodingKey {
            case dnsName = "DNSName"
            case evaluateTargetHealth = "EvaluateTargetHealth"
            case hostedZoneId = "HostedZoneId"
        }
    }

    public struct AssociateVPCWithHostedZoneRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        ///  Optional: A comment about the association request.
        public let comment: String?
        /// The ID of the private hosted zone that you want to associate an Amazon VPC
        /// 			with.
        /// 		       Note that you can't associate a VPC with a hosted zone that doesn't have an existing
        /// 			VPC association.
        public let hostedZoneId: String
        /// A complex type that contains information about the VPC that you want to associate with
        /// 			a private hosted zone.
        public let vpc: VPC

        public init(comment: String? = nil, hostedZoneId: String, vpc: VPC) {
            self.comment = comment
            self.hostedZoneId = hostedZoneId
            self.vpc = vpc
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.vpc.validate(name: "\(name).vpc")
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
            case vpc = "VPC"
        }
    }

    public struct AssociateVPCWithHostedZoneResponse: AWSDecodableShape {
        /// A complex type that describes the changes made to your hosted zone.
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct Change: AWSEncodableShape {
        /// The action to perform:
        ///
        /// 				            CREATE: Creates a resource record set that has the specified
        /// 					values.
        ///
        /// 				            DELETE: Deletes a existing resource record set.
        ///
        /// 					             To delete the resource record set that is associated with a traffic policy
        /// 						instance, use DeleteTrafficPolicyInstance. Amazon Route 53 will delete the
        /// 						resource record set automatically. If you delete the resource record set by
        /// 						using ChangeResourceRecordSets, Route 53 doesn't automatically
        /// 						delete the traffic policy instance, and you'll continue to be charged for it
        /// 						even though it's no longer in use.
        ///
        ///
        /// 				            UPSERT: If a resource record set doesn't already exist, Route 53
        /// 					creates it. If a resource record set does exist, Route 53 updates it with the
        /// 					values in the request.
        ///
        public let action: ChangeAction
        /// Information about the resource record set to create, delete, or update.
        public let resourceRecordSet: ResourceRecordSet

        public init(action: ChangeAction, resourceRecordSet: ResourceRecordSet) {
            self.action = action
            self.resourceRecordSet = resourceRecordSet
        }

        public func validate(name: String) throws {
            try self.resourceRecordSet.validate(name: "\(name).resourceRecordSet")
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case resourceRecordSet = "ResourceRecordSet"
        }
    }

    public struct ChangeBatch: AWSEncodableShape {
        public struct _ChangesEncoding: ArrayCoderProperties { public static let member = "Change" }

        /// Information about the changes to make to the record sets.
        @CustomCoding<ArrayCoder<_ChangesEncoding, Change>>
        public var changes: [Change]
        ///  Optional: Any comments you want to include about a change batch
        /// 			request.
        public let comment: String?

        public init(changes: [Change], comment: String? = nil) {
            self.changes = changes
            self.comment = comment
        }

        public func validate(name: String) throws {
            try self.changes.forEach {
                try $0.validate(name: "\(name).changes[]")
            }
            try self.validate(self.changes, name: "changes", parent: name, min: 1)
            try self.validate(self.comment, name: "comment", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case changes = "Changes"
            case comment = "Comment"
        }
    }

    public struct ChangeCidrCollectionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        ///  Information about changes to a CIDR collection.
        @CustomCoding<StandardArrayCoder>
        public var changes: [CidrCollectionChange]
        /// A sequential counter that Amazon Route 53 sets to 1 when you create a
        /// 			collection and increments it by 1 each time you update the collection.
        /// 		       We recommend that you use ListCidrCollection to get the current value of
        /// 				CollectionVersion for the collection that you want to update, and then
        /// 			include that value with the change request. This prevents Route 53 from
        /// 			overwriting an intervening update:
        ///
        /// 				           If the value in the request matches the value of
        /// 						CollectionVersion in the collection, Route 53 updates
        /// 					the collection.
        ///
        /// 				           If the value of CollectionVersion in the collection is greater
        /// 					than the value in the request, the collection was changed after you got the
        /// 					version number. Route 53 does not update the collection, and it
        /// 					returns a CidrCollectionVersionMismatch error.
        ///
        public let collectionVersion: Int64?
        /// The UUID of the CIDR collection to update.
        public let id: String

        public init(changes: [CidrCollectionChange], collectionVersion: Int64? = nil, id: String) {
            self.changes = changes
            self.collectionVersion = collectionVersion
            self.id = id
        }

        public func validate(name: String) throws {
            try self.changes.forEach {
                try $0.validate(name: "\(name).changes[]")
            }
            try self.validate(self.changes, name: "changes", parent: name, max: 1000)
            try self.validate(self.changes, name: "changes", parent: name, min: 1)
            try self.validate(self.collectionVersion, name: "collectionVersion", parent: name, min: 1)
            try self.validate(self.id, name: "id", parent: name, pattern: "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case changes = "Changes"
            case collectionVersion = "CollectionVersion"
        }
    }

    public struct ChangeCidrCollectionResponse: AWSDecodableShape {
        /// The ID that is returned by ChangeCidrCollection. You can use it as input to
        /// 				GetChange to see if a CIDR collection change has propagated or
        /// 			not.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id = "Id"
        }
    }

    public struct ChangeInfo: AWSDecodableShape {
        /// A comment you can provide.
        public let comment: String?
        /// This element contains an ID that you use when performing a GetChange action to get
        /// 			detailed information about the change.
        public let id: String
        /// The current state of the request. PENDING indicates that this request has
        /// 			not yet been applied to all Amazon Route 53 DNS servers.
        public let status: ChangeStatus
        /// The date and time that the change request was submitted in ISO 8601 format and Coordinated
        /// 			Universal Time (UTC). For example, the value 2017-03-27T17:48:16.751Z
        /// 			represents March 27, 2017 at 17:48:16.751 UTC.
        public let submittedAt: Date

        public init(comment: String? = nil, id: String, status: ChangeStatus, submittedAt: Date) {
            self.comment = comment
            self.id = id
            self.status = status
            self.submittedAt = submittedAt
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
            case id = "Id"
            case status = "Status"
            case submittedAt = "SubmittedAt"
        }
    }

    public struct ChangeResourceRecordSetsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        /// A complex type that contains an optional comment and the Changes
        /// 			element.
        public let changeBatch: ChangeBatch
        /// The ID of the hosted zone that contains the resource record sets that you want to
        /// 			change.
        public let hostedZoneId: String

        public init(changeBatch: ChangeBatch, hostedZoneId: String) {
            self.changeBatch = changeBatch
            self.hostedZoneId = hostedZoneId
        }

        public func validate(name: String) throws {
            try self.changeBatch.validate(name: "\(name).changeBatch")
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: String, CodingKey {
            case changeBatch = "ChangeBatch"
        }
    }

    public struct ChangeResourceRecordSetsResponse: AWSDecodableShape {
        /// A complex type that contains information about changes made to your hosted
        /// 			zone.
        /// 		       This element contains an ID that you use when performing a GetChange action to get
        /// 			detailed information about the change.
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct ChangeTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceId", location: .uri("ResourceId")),
            AWSMemberEncoding(label: "resourceType", location: .uri("ResourceType"))
        ]
        public struct _AddTagsEncoding: ArrayCoderProperties { public static let member = "Tag" }
        public struct _RemoveTagKeysEncoding: ArrayCoderProperties { public static let member = "Key" }

        /// A complex type that contains a list of the tags that you want to add to the specified
        /// 			health check or hosted zone and/or the tags that you want to edit Value
        /// 			for.
        /// 		       You can add a maximum of 10 tags to a health check or a hosted zone.
        @OptionalCustomCoding<ArrayCoder<_AddTagsEncoding, Tag>>
        public var addTags: [Tag]?
        /// A complex type that contains a list of the tags that you want to delete from the
        /// 			specified health check or hosted zone. You can specify up to 10 keys.
        @OptionalCustomCoding<ArrayCoder<_RemoveTagKeysEncoding, String>>
        public var removeTagKeys: [String]?
        /// The ID of the resource for which you want to add, change, or delete tags.
        public let resourceId: String
        /// The type of the resource.
        ///
        /// 				           The resource type for health checks is healthcheck.
        ///
        /// 				           The resource type for hosted zones is hostedzone.
        ///
        public let resourceType: TagResourceType

        public init(addTags: [Tag]? = nil, removeTagKeys: [String]? = nil, resourceId: String, resourceType: TagResourceType) {
            self.addTags = addTags
            self.removeTagKeys = removeTagKeys
            self.resourceId = resourceId
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.addTags?.forEach {
                try $0.validate(name: "\(name).addTags[]")
            }
            try self.validate(self.addTags, name: "addTags", parent: name, max: 10)
            try self.validate(self.addTags, name: "addTags", parent: name, min: 1)
            try self.removeTagKeys?.forEach {
                try validate($0, name: "removeTagKeys[]", parent: name, max: 128)
            }
            try self.validate(self.removeTagKeys, name: "removeTagKeys", parent: name, max: 10)
            try self.validate(self.removeTagKeys, name: "removeTagKeys", parent: name, min: 1)
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 64)
        }

        private enum CodingKeys: String, CodingKey {
            case addTags = "AddTags"
            case removeTagKeys = "RemoveTagKeys"
        }
    }

    public struct ChangeTagsForResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct CidrBlockSummary: AWSDecodableShape {
        /// Value for the CIDR block.
        public let cidrBlock: String?
        /// The location name of the CIDR block.
        public let locationName: String?

        public init(cidrBlock: String? = nil, locationName: String? = nil) {
            self.cidrBlock = cidrBlock
            self.locationName = locationName
        }

        private enum CodingKeys: String, CodingKey {
            case cidrBlock = "CidrBlock"
            case locationName = "LocationName"
        }
    }

    public struct CidrCollection: AWSDecodableShape {
        /// The ARN of the collection. Can be used to reference the collection in IAM policy or in
        /// 			another Amazon Web Services account.
        public let arn: String?
        /// The unique ID of the CIDR collection.
        public let id: String?
        /// The name of a CIDR collection.
        public let name: String?
        /// A sequential counter that Route 53 sets to 1 when you create a CIDR
        /// 			collection and increments by 1 each time you update settings for the CIDR
        /// 			collection.
        public let version: Int64?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil, version: Int64? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
            case version = "Version"
        }
    }

    public struct CidrCollectionChange: AWSEncodableShape {
        public struct _CidrListEncoding: ArrayCoderProperties { public static let member = "Cidr" }

        /// CIDR collection change action.
        public let action: CidrCollectionChangeAction
        /// List of CIDR blocks.
        @CustomCoding<ArrayCoder<_CidrListEncoding, String>>
        public var cidrList: [String]
        /// Name of the location that is associated with the CIDR
        /// 			collection.
        public let locationName: String

        public init(action: CidrCollectionChangeAction, cidrList: [String], locationName: String) {
            self.action = action
            self.cidrList = cidrList
            self.locationName = locationName
        }

        public func validate(name: String) throws {
            try self.cidrList.forEach {
                try validate($0, name: "cidrList[]", parent: name, max: 50)
                try validate($0, name: "cidrList[]", parent: name, min: 1)
                try validate($0, name: "cidrList[]", parent: name, pattern: "\\S")
            }
            try self.validate(self.cidrList, name: "cidrList", parent: name, max: 1000)
            try self.validate(self.cidrList, name: "cidrList", parent: name, min: 1)
            try self.validate(self.locationName, name: "locationName", parent: name, max: 16)
            try self.validate(self.locationName, name: "locationName", parent: name, min: 1)
            try self.validate(self.locationName, name: "locationName", parent: name, pattern: "^[0-9A-Za-z_\\-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case cidrList = "CidrList"
            case locationName = "LocationName"
        }
    }

    public struct CidrRoutingConfig: AWSEncodableShape & AWSDecodableShape {
        /// The CIDR collection ID.
        public let collectionId: String
        /// The CIDR collection location name.
        public let locationName: String

        public init(collectionId: String, locationName: String) {
            self.collectionId = collectionId
            self.locationName = locationName
        }

        public func validate(name: String) throws {
            try self.validate(self.collectionId, name: "collectionId", parent: name, pattern: "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$")
            try self.validate(self.locationName, name: "locationName", parent: name, max: 16)
            try self.validate(self.locationName, name: "locationName", parent: name, min: 1)
            try self.validate(self.locationName, name: "locationName", parent: name, pattern: "^[0-9A-Za-z_\\-\\*]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case collectionId = "CollectionId"
            case locationName = "LocationName"
        }
    }

    public struct CloudWatchAlarmConfiguration: AWSDecodableShape {
        public struct _DimensionsEncoding: ArrayCoderProperties { public static let member = "Dimension" }

        /// For the metric that the CloudWatch alarm is associated with, the arithmetic operation
        /// 			that is used for the comparison.
        public let comparisonOperator: ComparisonOperator
        /// For the metric that the CloudWatch alarm is associated with, a complex type that
        /// 			contains information about the dimensions for the metric. For information, see Amazon
        /// 				CloudWatch Namespaces, Dimensions, and Metrics Reference in the
        /// 				Amazon CloudWatch User Guide.
        @OptionalCustomCoding<ArrayCoder<_DimensionsEncoding, Dimension>>
        public var dimensions: [Dimension]?
        /// For the metric that the CloudWatch alarm is associated with, the number of periods
        /// 			that the metric is compared to the threshold.
        public let evaluationPeriods: Int
        /// The name of the CloudWatch metric that the alarm is associated with.
        public let metricName: String
        /// The namespace of the metric that the alarm is associated with. For more information,
        /// 			see Amazon
        /// 				CloudWatch Namespaces, Dimensions, and Metrics Reference in the
        /// 				Amazon CloudWatch User Guide.
        public let namespace: String
        /// For the metric that the CloudWatch alarm is associated with, the duration of one
        /// 			evaluation period in seconds.
        public let period: Int
        /// For the metric that the CloudWatch alarm is associated with, the statistic that is
        /// 			applied to the metric.
        public let statistic: Statistic
        /// For the metric that the CloudWatch alarm is associated with, the value the metric is
        /// 			compared with.
        public let threshold: Double

        public init(comparisonOperator: ComparisonOperator, dimensions: [Dimension]? = nil, evaluationPeriods: Int, metricName: String, namespace: String, period: Int, statistic: Statistic, threshold: Double) {
            self.comparisonOperator = comparisonOperator
            self.dimensions = dimensions
            self.evaluationPeriods = evaluationPeriods
            self.metricName = metricName
            self.namespace = namespace
            self.period = period
            self.statistic = statistic
            self.threshold = threshold
        }

        private enum CodingKeys: String, CodingKey {
            case comparisonOperator = "ComparisonOperator"
            case dimensions = "Dimensions"
            case evaluationPeriods = "EvaluationPeriods"
            case metricName = "MetricName"
            case namespace = "Namespace"
            case period = "Period"
            case statistic = "Statistic"
            case threshold = "Threshold"
        }
    }

    public struct CollectionSummary: AWSDecodableShape {
        /// The ARN of the collection summary. Can be used to reference the collection in IAM
        /// 			policy or cross-account.
        public let arn: String?
        /// Unique ID for the CIDR collection.
        public let id: String?
        /// The name of a CIDR collection.
        public let name: String?
        /// A sequential counter that Route 53 sets to 1 when you create a CIDR
        /// 			collection and increments by 1 each time you update settings for the CIDR
        /// 			collection.
        public let version: Int64?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil, version: Int64? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
            case version = "Version"
        }
    }

    public struct CreateCidrCollectionRequest: AWSEncodableShape {
        /// A client-specific token that allows requests to be securely retried so that the
        /// 			intended outcome will only occur once, retries receive a similar response, and there are
        /// 			no additional edge cases to handle.
        public let callerReference: String
        /// A unique identifier for the account that can be used to reference the collection from
        /// 			other API calls.
        public let name: String

        public init(callerReference: String, name: String) {
            self.callerReference = callerReference
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.callerReference, name: "callerReference", parent: name, max: 64)
            try self.validate(self.callerReference, name: "callerReference", parent: name, min: 1)
            try self.validate(self.callerReference, name: "callerReference", parent: name, pattern: "^\\p{ASCII}+$")
            try self.validate(self.name, name: "name", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[0-9A-Za-z_\\-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case name = "Name"
        }
    }

    public struct CreateCidrCollectionResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// A complex type that contains information about the CIDR collection.
        public let collection: CidrCollection?
        /// A unique URL that represents the location for the CIDR collection.
        public let location: String?

        public init(collection: CidrCollection? = nil, location: String? = nil) {
            self.collection = collection
            self.location = location
        }

        private enum CodingKeys: String, CodingKey {
            case collection = "Collection"
            case location = "Location"
        }
    }

    public struct CreateHealthCheckRequest: AWSEncodableShape {
        /// A unique string that identifies the request and that allows you to retry a failed
        /// 				CreateHealthCheck request without the risk of creating two identical
        /// 			health checks:
        ///
        /// 				           If you send a CreateHealthCheck request with the same
        /// 						CallerReference and settings as a previous request, and if the
        /// 					health check doesn't exist, Amazon Route 53 creates the health check. If the
        /// 					health check does exist, Route 53 returns the settings for the existing health
        /// 					check.
        ///
        /// 				           If you send a CreateHealthCheck request with the same
        /// 						CallerReference as a deleted health check, regardless of the
        /// 					settings, Route 53 returns a HealthCheckAlreadyExists error.
        ///
        /// 				           If you send a CreateHealthCheck request with the same
        /// 						CallerReference as an existing health check but with different
        /// 					settings, Route 53 returns a HealthCheckAlreadyExists error.
        ///
        /// 				           If you send a CreateHealthCheck request with a unique
        /// 						CallerReference but settings identical to an existing health
        /// 					check, Route 53 creates the health check.
        ///
        public let callerReference: String
        /// A complex type that contains settings for a new health check.
        public let healthCheckConfig: HealthCheckConfig

        public init(callerReference: String, healthCheckConfig: HealthCheckConfig) {
            self.callerReference = callerReference
            self.healthCheckConfig = healthCheckConfig
        }

        public func validate(name: String) throws {
            try self.validate(self.callerReference, name: "callerReference", parent: name, max: 64)
            try self.validate(self.callerReference, name: "callerReference", parent: name, min: 1)
            try self.healthCheckConfig.validate(name: "\(name).healthCheckConfig")
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case healthCheckConfig = "HealthCheckConfig"
        }
    }

    public struct CreateHealthCheckResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// A complex type that contains identifying information about the health check.
        public let healthCheck: HealthCheck
        /// The unique URL representing the new health check.
        public let location: String

        public init(healthCheck: HealthCheck, location: String) {
            self.healthCheck = healthCheck
            self.location = location
        }

        private enum CodingKeys: String, CodingKey {
            case healthCheck = "HealthCheck"
            case location = "Location"
        }
    }

    public struct CreateHostedZoneRequest: AWSEncodableShape {
        /// A unique string that identifies the request and that allows failed
        /// 				CreateHostedZone requests to be retried without the risk of executing
        /// 			the operation twice. You must use a unique CallerReference string every
        /// 			time you submit a CreateHostedZone request. CallerReference
        /// 			can be any unique string, for example, a date/time stamp.
        public let callerReference: String
        /// If you want to associate a reusable delegation set with this hosted zone, the ID that
        /// 				Amazon Route 53 assigned to the reusable delegation set when you created it.
        /// 			For more information about reusable delegation sets, see CreateReusableDelegationSet.
        public let delegationSetId: String?
        /// (Optional) A complex type that contains the following optional values:
        ///
        /// 				           For public and private hosted zones, an optional comment
        ///
        /// 				           For private hosted zones, an optional PrivateZone element
        ///
        /// 		       If you don't specify a comment or the PrivateZone element, omit
        /// 				HostedZoneConfig and the other elements.
        public let hostedZoneConfig: HostedZoneConfig?
        /// The name of the domain. Specify a fully qualified domain name, for example,
        /// 				www.example.com. The trailing dot is optional; Amazon Route 53 assumes that the domain name is fully qualified. This means that
        /// 				Route 53 treats www.example.com (without a trailing
        /// 			dot) and www.example.com. (with a trailing dot) as
        /// 			identical.
        /// 		       If you're creating a public hosted zone, this is the name you have registered with
        /// 			your DNS registrar. If your domain name is registered with a registrar other than
        /// 				Route 53, change the name servers for your domain to the set of
        /// 				NameServers that CreateHostedZone returns in
        /// 				DelegationSet.
        public let name: String
        /// (Private hosted zones only) A complex type that contains information about the Amazon
        /// 			VPC that you're associating with this hosted zone.
        /// 		       You can specify only one Amazon VPC when you create a private hosted zone. If you are
        /// 			associating a VPC with a hosted zone with this request, the paramaters
        /// 				VPCId and VPCRegion are also required.
        /// 		       To associate additional Amazon VPCs with the hosted zone, use AssociateVPCWithHostedZone after you create a hosted zone.
        public let vpc: VPC?

        public init(callerReference: String, delegationSetId: String? = nil, hostedZoneConfig: HostedZoneConfig? = nil, name: String, vpc: VPC? = nil) {
            self.callerReference = callerReference
            self.delegationSetId = delegationSetId
            self.hostedZoneConfig = hostedZoneConfig
            self.name = name
            self.vpc = vpc
        }

        public func validate(name: String) throws {
            try self.validate(self.callerReference, name: "callerReference", parent: name, max: 128)
            try self.validate(self.callerReference, name: "callerReference", parent: name, min: 1)
            try self.validate(self.delegationSetId, name: "delegationSetId", parent: name, max: 32)
            try self.hostedZoneConfig?.validate(name: "\(name).hostedZoneConfig")
            try self.validate(self.name, name: "name", parent: name, max: 1024)
            try self.vpc?.validate(name: "\(name).vpc")
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case delegationSetId = "DelegationSetId"
            case hostedZoneConfig = "HostedZoneConfig"
            case name = "Name"
            case vpc = "VPC"
        }
    }

    public struct CreateHostedZoneResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// A complex type that contains information about the CreateHostedZone
        /// 			request.
        public let changeInfo: ChangeInfo
        /// A complex type that describes the name servers for this hosted zone.
        public let delegationSet: DelegationSet
        /// A complex type that contains general information about the hosted zone.
        public let hostedZone: HostedZone
        /// The unique URL representing the new hosted zone.
        public let location: String
        /// A complex type that contains information about an Amazon VPC that you associated with
        /// 			this hosted zone.
        public let vpc: VPC?

        public init(changeInfo: ChangeInfo, delegationSet: DelegationSet, hostedZone: HostedZone, location: String, vpc: VPC? = nil) {
            self.changeInfo = changeInfo
            self.delegationSet = delegationSet
            self.hostedZone = hostedZone
            self.location = location
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
            case delegationSet = "DelegationSet"
            case hostedZone = "HostedZone"
            case location = "Location"
            case vpc = "VPC"
        }
    }

    public struct CreateKeySigningKeyRequest: AWSEncodableShape {
        /// A unique string that identifies the request.
        public let callerReference: String
        /// The unique string (ID) used to identify a hosted zone.
        public let hostedZoneId: String
        /// The Amazon resource name (ARN) for a customer managed key in Key Management Service
        /// 				(KMS). The KeyManagementServiceArn must be unique for
        /// 			each key-signing key (KSK) in a single hosted zone. To see an example of
        /// 				KeyManagementServiceArn that grants the correct permissions for DNSSEC,
        /// 			scroll down to Example.
        /// 		       You must configure the customer managed customer managed key as follows:
        /// 		        Status
        /// 					          Enabled
        /// 				         Key spec
        /// 					          ECC_NIST_P256
        /// 				         Key usage
        /// 					          Sign and verify
        /// 				         Key policy
        /// 					          The key policy must give permission for the following actions:
        ///
        /// 							              DescribeKey
        ///
        /// 							              GetPublicKey
        ///
        /// 							              Sign
        ///
        /// 					          The key policy must also include the Amazon Route 53 service in the
        /// 						principal for your account. Specify the following:
        ///
        /// 							               "Service": "dnssec-route53.amazonaws.com"
        ///
        ///
        /// 		       For more information about working with a customer managed key in KMS, see Key Management Service concepts.
        public let keyManagementServiceArn: String
        /// A string used to identify a key-signing key (KSK). Name can include
        /// 			numbers, letters, and underscores (_). Name must be unique for each
        /// 			key-signing key in the same hosted zone.
        public let name: String
        /// A string specifying the initial status of the key-signing key (KSK). You can set the
        /// 			value to ACTIVE or INACTIVE.
        public let status: String

        public init(callerReference: String, hostedZoneId: String, keyManagementServiceArn: String, name: String, status: String) {
            self.callerReference = callerReference
            self.hostedZoneId = hostedZoneId
            self.keyManagementServiceArn = keyManagementServiceArn
            self.name = name
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.callerReference, name: "callerReference", parent: name, max: 128)
            try self.validate(self.callerReference, name: "callerReference", parent: name, min: 1)
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, min: 3)
            try self.validate(self.status, name: "status", parent: name, max: 150)
            try self.validate(self.status, name: "status", parent: name, min: 5)
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case hostedZoneId = "HostedZoneId"
            case keyManagementServiceArn = "KeyManagementServiceArn"
            case name = "Name"
            case status = "Status"
        }
    }

    public struct CreateKeySigningKeyResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        public let changeInfo: ChangeInfo
        /// The key-signing key (KSK) that the request creates.
        public let keySigningKey: KeySigningKey
        /// The unique URL representing the new key-signing key (KSK).
        public let location: String

        public init(changeInfo: ChangeInfo, keySigningKey: KeySigningKey, location: String) {
            self.changeInfo = changeInfo
            self.keySigningKey = keySigningKey
            self.location = location
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
            case keySigningKey = "KeySigningKey"
            case location = "Location"
        }
    }

    public struct CreateQueryLoggingConfigRequest: AWSEncodableShape {
        /// The Amazon Resource Name (ARN) for the log group that you want to Amazon Route 53 to
        /// 			send query logs to. This is the format of the ARN:
        /// 		       arn:aws:logs:region:account-id:log-group:log_group_name
        /// 		       To get the ARN for a log group, you can use the CloudWatch console, the DescribeLogGroups API action, the describe-log-groups
        /// 			command, or the applicable command in one of the Amazon Web Services SDKs.
        public let cloudWatchLogsLogGroupArn: String
        /// The ID of the hosted zone that you want to log queries for. You can log queries only
        /// 			for public hosted zones.
        public let hostedZoneId: String

        public init(cloudWatchLogsLogGroupArn: String, hostedZoneId: String) {
            self.cloudWatchLogsLogGroupArn = cloudWatchLogsLogGroupArn
            self.hostedZoneId = hostedZoneId
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: String, CodingKey {
            case cloudWatchLogsLogGroupArn = "CloudWatchLogsLogGroupArn"
            case hostedZoneId = "HostedZoneId"
        }
    }

    public struct CreateQueryLoggingConfigResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// The unique URL representing the new query logging configuration.
        public let location: String
        /// A complex type that contains the ID for a query logging configuration, the ID of the
        /// 			hosted zone that you want to log queries for, and the ARN for the log group that you
        /// 			want Amazon Route 53 to send query logs to.
        public let queryLoggingConfig: QueryLoggingConfig

        public init(location: String, queryLoggingConfig: QueryLoggingConfig) {
            self.location = location
            self.queryLoggingConfig = queryLoggingConfig
        }

        private enum CodingKeys: String, CodingKey {
            case location = "Location"
            case queryLoggingConfig = "QueryLoggingConfig"
        }
    }

    public struct CreateReusableDelegationSetRequest: AWSEncodableShape {
        /// A unique string that identifies the request, and that allows you to retry failed
        /// 				CreateReusableDelegationSet requests without the risk of executing the
        /// 			operation twice. You must use a unique CallerReference string every time
        /// 			you submit a CreateReusableDelegationSet request.
        /// 				CallerReference can be any unique string, for example a date/time
        /// 			stamp.
        public let callerReference: String
        /// If you want to mark the delegation set for an existing hosted zone as reusable, the ID
        /// 			for that hosted zone.
        public let hostedZoneId: String?

        public init(callerReference: String, hostedZoneId: String? = nil) {
            self.callerReference = callerReference
            self.hostedZoneId = hostedZoneId
        }

        public func validate(name: String) throws {
            try self.validate(self.callerReference, name: "callerReference", parent: name, max: 128)
            try self.validate(self.callerReference, name: "callerReference", parent: name, min: 1)
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case hostedZoneId = "HostedZoneId"
        }
    }

    public struct CreateReusableDelegationSetResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// A complex type that contains name server information.
        public let delegationSet: DelegationSet
        /// The unique URL representing the new reusable delegation set.
        public let location: String

        public init(delegationSet: DelegationSet, location: String) {
            self.delegationSet = delegationSet
            self.location = location
        }

        private enum CodingKeys: String, CodingKey {
            case delegationSet = "DelegationSet"
            case location = "Location"
        }
    }

    public struct CreateTrafficPolicyInstanceRequest: AWSEncodableShape {
        /// The ID of the hosted zone that you want Amazon Route 53 to create resource record sets
        /// 			in by using the configuration in a traffic policy.
        public let hostedZoneId: String
        /// The domain name (such as example.com) or subdomain name (such as www.example.com) for
        /// 			which Amazon Route 53 responds to DNS queries by using the resource record sets that
        /// 			Route 53 creates for this traffic policy instance.
        public let name: String
        /// The ID of the traffic policy that you want to use to create resource record sets in
        /// 			the specified hosted zone.
        public let trafficPolicyId: String
        /// The version of the traffic policy that you want to use to create resource record sets
        /// 			in the specified hosted zone.
        public let trafficPolicyVersion: Int
        /// (Optional) The TTL that you want Amazon Route 53 to assign to all of the resource
        /// 			record sets that it creates in the specified hosted zone.
        public let ttl: Int64

        public init(hostedZoneId: String, name: String, trafficPolicyId: String, trafficPolicyVersion: Int, ttl: Int64) {
            self.hostedZoneId = hostedZoneId
            self.name = name
            self.trafficPolicyId = trafficPolicyId
            self.trafficPolicyVersion = trafficPolicyVersion
            self.ttl = ttl
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.name, name: "name", parent: name, max: 1024)
            try self.validate(self.trafficPolicyId, name: "trafficPolicyId", parent: name, max: 36)
            try self.validate(self.trafficPolicyId, name: "trafficPolicyId", parent: name, min: 1)
            try self.validate(self.trafficPolicyVersion, name: "trafficPolicyVersion", parent: name, max: 1000)
            try self.validate(self.trafficPolicyVersion, name: "trafficPolicyVersion", parent: name, min: 1)
            try self.validate(self.ttl, name: "ttl", parent: name, max: 2_147_483_647)
            try self.validate(self.ttl, name: "ttl", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneId = "HostedZoneId"
            case name = "Name"
            case trafficPolicyId = "TrafficPolicyId"
            case trafficPolicyVersion = "TrafficPolicyVersion"
            case ttl = "TTL"
        }
    }

    public struct CreateTrafficPolicyInstanceResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// A unique URL that represents a new traffic policy instance.
        public let location: String
        /// A complex type that contains settings for the new traffic policy instance.
        public let trafficPolicyInstance: TrafficPolicyInstance

        public init(location: String, trafficPolicyInstance: TrafficPolicyInstance) {
            self.location = location
            self.trafficPolicyInstance = trafficPolicyInstance
        }

        private enum CodingKeys: String, CodingKey {
            case location = "Location"
            case trafficPolicyInstance = "TrafficPolicyInstance"
        }
    }

    public struct CreateTrafficPolicyRequest: AWSEncodableShape {
        /// (Optional) Any comments that you want to include about the traffic policy.
        public let comment: String?
        /// The definition of this traffic policy in JSON format. For more information, see Traffic Policy Document Format.
        public let document: String
        /// The name of the traffic policy.
        public let name: String

        public init(comment: String? = nil, document: String, name: String) {
            self.comment = comment
            self.document = document
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.comment, name: "comment", parent: name, max: 1024)
            try self.validate(self.document, name: "document", parent: name, max: 102_400)
            try self.validate(self.name, name: "name", parent: name, max: 512)
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
            case document = "Document"
            case name = "Name"
        }
    }

    public struct CreateTrafficPolicyResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// A unique URL that represents a new traffic policy.
        public let location: String
        /// A complex type that contains settings for the new traffic policy.
        public let trafficPolicy: TrafficPolicy

        public init(location: String, trafficPolicy: TrafficPolicy) {
            self.location = location
            self.trafficPolicy = trafficPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case location = "Location"
            case trafficPolicy = "TrafficPolicy"
        }
    }

    public struct CreateTrafficPolicyVersionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The comment that you specified in the CreateTrafficPolicyVersion request,
        /// 			if any.
        public let comment: String?
        /// The definition of this version of the traffic policy, in JSON format. You specified
        /// 			the JSON in the CreateTrafficPolicyVersion request. For more information
        /// 			about the JSON format, see CreateTrafficPolicy.
        public let document: String
        /// The ID of the traffic policy for which you want to create a new version.
        public let id: String

        public init(comment: String? = nil, document: String, id: String) {
            self.comment = comment
            self.document = document
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.comment, name: "comment", parent: name, max: 1024)
            try self.validate(self.document, name: "document", parent: name, max: 102_400)
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
            case document = "Document"
        }
    }

    public struct CreateTrafficPolicyVersionResponse: AWSDecodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "location", location: .header("Location"))
        ]

        /// A unique URL that represents a new traffic policy version.
        public let location: String
        /// A complex type that contains settings for the new version of the traffic
        /// 			policy.
        public let trafficPolicy: TrafficPolicy

        public init(location: String, trafficPolicy: TrafficPolicy) {
            self.location = location
            self.trafficPolicy = trafficPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case location = "Location"
            case trafficPolicy = "TrafficPolicy"
        }
    }

    public struct CreateVPCAssociationAuthorizationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        /// The ID of the private hosted zone that you want to authorize associating a VPC
        /// 			with.
        public let hostedZoneId: String
        /// A complex type that contains the VPC ID and region for the VPC that you want to
        /// 			authorize associating with your hosted zone.
        public let vpc: VPC

        public init(hostedZoneId: String, vpc: VPC) {
            self.hostedZoneId = hostedZoneId
            self.vpc = vpc
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.vpc.validate(name: "\(name).vpc")
        }

        private enum CodingKeys: String, CodingKey {
            case vpc = "VPC"
        }
    }

    public struct CreateVPCAssociationAuthorizationResponse: AWSDecodableShape {
        /// The ID of the hosted zone that you authorized associating a VPC with.
        public let hostedZoneId: String
        /// The VPC that you authorized associating with a hosted zone.
        public let vpc: VPC

        public init(hostedZoneId: String, vpc: VPC) {
            self.hostedZoneId = hostedZoneId
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneId = "HostedZoneId"
            case vpc = "VPC"
        }
    }

    public struct DNSSECStatus: AWSDecodableShape {
        /// A string that represents the current hosted zone signing status.
        /// 		       Status can have one of the following values:
        /// 		        SIGNING
        /// 					          DNSSEC signing is enabled for the hosted zone.
        /// 				         NOT_SIGNING
        /// 					          DNSSEC signing is not enabled for the hosted zone.
        /// 				         DELETING
        /// 					          DNSSEC signing is in the process of being removed for the hosted
        /// 						zone.
        /// 				         ACTION_NEEDED
        /// 					          There is a problem with signing in the hosted zone that requires you to
        /// 						take action to resolve. For example, the customer managed key might have
        /// 						been deleted, or the permissions for the customer managed key might have
        /// 						been changed.
        /// 				         INTERNAL_FAILURE
        /// 					          There was an error during a request. Before you can continue to work with
        /// 						DNSSEC signing, including with key-signing keys (KSKs), you must correct the
        /// 						problem by enabling or disabling DNSSEC signing for the hosted zone.
        ///
        public let serveSignature: String?
        /// The status message provided for the following DNSSEC signing status:
        /// 				INTERNAL_FAILURE. The status message includes information about what
        /// 			the problem might be and steps that you can take to correct the issue.
        public let statusMessage: String?

        public init(serveSignature: String? = nil, statusMessage: String? = nil) {
            self.serveSignature = serveSignature
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case serveSignature = "ServeSignature"
            case statusMessage = "StatusMessage"
        }
    }

    public struct DeactivateKeySigningKeyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId")),
            AWSMemberEncoding(label: "name", location: .uri("Name"))
        ]

        /// A unique string used to identify a hosted zone.
        public let hostedZoneId: String
        /// A string used to identify a key-signing key (KSK).
        public let name: String

        public init(hostedZoneId: String, name: String) {
            self.hostedZoneId = hostedZoneId
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, min: 3)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeactivateKeySigningKeyResponse: AWSDecodableShape {
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct DelegationSet: AWSDecodableShape {
        public struct _NameServersEncoding: ArrayCoderProperties { public static let member = "NameServer" }

        /// The value that you specified for CallerReference when you created the
        /// 			reusable delegation set.
        public let callerReference: String?
        /// The ID that Amazon Route 53 assigns to a reusable delegation set.
        public let id: String?
        /// A complex type that contains a list of the authoritative name servers for a hosted
        /// 			zone or for a reusable delegation set.
        @CustomCoding<ArrayCoder<_NameServersEncoding, String>>
        public var nameServers: [String]

        public init(callerReference: String? = nil, id: String? = nil, nameServers: [String]) {
            self.callerReference = callerReference
            self.id = id
            self.nameServers = nameServers
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case id = "Id"
            case nameServers = "NameServers"
        }
    }

    public struct DeleteCidrCollectionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The UUID of the collection to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, pattern: "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteCidrCollectionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteHealthCheckRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "healthCheckId", location: .uri("HealthCheckId"))
        ]

        /// The ID of the health check that you want to delete.
        public let healthCheckId: String

        public init(healthCheckId: String) {
            self.healthCheckId = healthCheckId
        }

        public func validate(name: String) throws {
            try self.validate(self.healthCheckId, name: "healthCheckId", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteHealthCheckResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteHostedZoneRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the hosted zone you want to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteHostedZoneResponse: AWSDecodableShape {
        /// A complex type that contains the ID, the status, and the date and time of a request to
        /// 			delete a hosted zone.
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct DeleteKeySigningKeyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId")),
            AWSMemberEncoding(label: "name", location: .uri("Name"))
        ]

        /// A unique string used to identify a hosted zone.
        public let hostedZoneId: String
        /// A string used to identify a key-signing key (KSK).
        public let name: String

        public init(hostedZoneId: String, name: String) {
            self.hostedZoneId = hostedZoneId
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, min: 3)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteKeySigningKeyResponse: AWSDecodableShape {
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct DeleteQueryLoggingConfigRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the configuration that you want to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteQueryLoggingConfigResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteReusableDelegationSetRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the reusable delegation set that you want to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteReusableDelegationSetResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteTrafficPolicyInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the traffic policy instance that you want to delete.
        ///
        /// 			         When you delete a traffic policy instance, Amazon Route 53 also deletes all of the
        /// 				resource record sets that were created when you created the traffic policy
        /// 				instance.
        ///
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteTrafficPolicyInstanceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteTrafficPolicyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "version", location: .uri("Version"))
        ]

        /// The ID of the traffic policy that you want to delete.
        public let id: String
        /// The version number of the traffic policy that you want to delete.
        public let version: Int

        public init(id: String, version: Int) {
            self.id = id
            self.version = version
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
            try self.validate(self.version, name: "version", parent: name, max: 1000)
            try self.validate(self.version, name: "version", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteTrafficPolicyResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteVPCAssociationAuthorizationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        /// When removing authorization to associate a VPC that was created by one Amazon Web Services account with a hosted zone that was created with a different Amazon Web Services account, the ID of the hosted zone.
        public let hostedZoneId: String
        /// When removing authorization to associate a VPC that was created by one Amazon Web Services account with a hosted zone that was created with a different Amazon Web Services account, a complex type that includes the ID and region of the
        /// 			VPC.
        public let vpc: VPC

        public init(hostedZoneId: String, vpc: VPC) {
            self.hostedZoneId = hostedZoneId
            self.vpc = vpc
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.vpc.validate(name: "\(name).vpc")
        }

        private enum CodingKeys: String, CodingKey {
            case vpc = "VPC"
        }
    }

    public struct DeleteVPCAssociationAuthorizationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Dimension: AWSDecodableShape {
        /// For the metric that the CloudWatch alarm is associated with, the name of one
        /// 			dimension.
        public let name: String
        /// For the metric that the CloudWatch alarm is associated with, the value of one
        /// 			dimension.
        public let value: String

        public init(name: String, value: String) {
            self.name = name
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case value = "Value"
        }
    }

    public struct DisableHostedZoneDNSSECRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        /// A unique string used to identify a hosted zone.
        public let hostedZoneId: String

        public init(hostedZoneId: String) {
            self.hostedZoneId = hostedZoneId
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisableHostedZoneDNSSECResponse: AWSDecodableShape {
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct DisassociateVPCFromHostedZoneRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        ///  Optional: A comment about the disassociation request.
        public let comment: String?
        /// The ID of the private hosted zone that you want to disassociate a VPC from.
        public let hostedZoneId: String
        /// A complex type that contains information about the VPC that you're disassociating from
        /// 			the specified hosted zone.
        public let vpc: VPC

        public init(comment: String? = nil, hostedZoneId: String, vpc: VPC) {
            self.comment = comment
            self.hostedZoneId = hostedZoneId
            self.vpc = vpc
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.vpc.validate(name: "\(name).vpc")
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
            case vpc = "VPC"
        }
    }

    public struct DisassociateVPCFromHostedZoneResponse: AWSDecodableShape {
        /// A complex type that describes the changes made to the specified private hosted
        /// 			zone.
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct EnableHostedZoneDNSSECRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        /// A unique string used to identify a hosted zone.
        public let hostedZoneId: String

        public init(hostedZoneId: String) {
            self.hostedZoneId = hostedZoneId
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct EnableHostedZoneDNSSECResponse: AWSDecodableShape {
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct GeoLocation: AWSEncodableShape & AWSDecodableShape {
        /// The two-letter code for the continent.
        /// 		       Amazon Route 53 supports the following continent codes:
        ///
        /// 				            AF: Africa
        ///
        /// 				            AN: Antarctica
        ///
        /// 				            AS: Asia
        ///
        /// 				            EU: Europe
        ///
        /// 				            OC: Oceania
        ///
        /// 				            NA: North America
        ///
        /// 				            SA: South America
        ///
        /// 		       Constraint: Specifying ContinentCode with either CountryCode
        /// 			or SubdivisionCode returns an InvalidInput error.
        public let continentCode: String?
        /// For geolocation resource record sets, the two-letter code for a country.
        /// 		       Amazon Route 53 uses the two-letter country codes that are specified in ISO standard 3166-1
        /// 				alpha-2.
        public let countryCode: String?
        /// For geolocation resource record sets, the two-letter code for a state of the United
        /// 			States. Route 53 doesn't support any other values for SubdivisionCode. For
        /// 			a list of state abbreviations, see Appendix B: Two–Letter State and Possession Abbreviations on the United
        /// 			States Postal Service website.
        /// 		       If you specify subdivisioncode, you must also specify US for
        /// 				CountryCode.
        public let subdivisionCode: String?

        public init(continentCode: String? = nil, countryCode: String? = nil, subdivisionCode: String? = nil) {
            self.continentCode = continentCode
            self.countryCode = countryCode
            self.subdivisionCode = subdivisionCode
        }

        public func validate(name: String) throws {
            try self.validate(self.continentCode, name: "continentCode", parent: name, max: 2)
            try self.validate(self.continentCode, name: "continentCode", parent: name, min: 2)
            try self.validate(self.countryCode, name: "countryCode", parent: name, max: 2)
            try self.validate(self.countryCode, name: "countryCode", parent: name, min: 1)
            try self.validate(self.subdivisionCode, name: "subdivisionCode", parent: name, max: 3)
            try self.validate(self.subdivisionCode, name: "subdivisionCode", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case continentCode = "ContinentCode"
            case countryCode = "CountryCode"
            case subdivisionCode = "SubdivisionCode"
        }
    }

    public struct GeoLocationDetails: AWSDecodableShape {
        /// The two-letter code for the continent.
        public let continentCode: String?
        /// The full name of the continent.
        public let continentName: String?
        /// The two-letter code for the country.
        public let countryCode: String?
        /// The name of the country.
        public let countryName: String?
        /// The code for the subdivision, such as a particular state within the United States. For
        /// 			a list of US state abbreviations, see Appendix B: Two–Letter State and
        /// 				Possession Abbreviations on the United States Postal Service website. For a
        /// 			list of all supported subdivision codes, use the ListGeoLocations
        /// 			API.
        public let subdivisionCode: String?
        /// The full name of the subdivision. Route 53 currently supports only states in the
        /// 			United States.
        public let subdivisionName: String?

        public init(continentCode: String? = nil, continentName: String? = nil, countryCode: String? = nil, countryName: String? = nil, subdivisionCode: String? = nil, subdivisionName: String? = nil) {
            self.continentCode = continentCode
            self.continentName = continentName
            self.countryCode = countryCode
            self.countryName = countryName
            self.subdivisionCode = subdivisionCode
            self.subdivisionName = subdivisionName
        }

        private enum CodingKeys: String, CodingKey {
            case continentCode = "ContinentCode"
            case continentName = "ContinentName"
            case countryCode = "CountryCode"
            case countryName = "CountryName"
            case subdivisionCode = "SubdivisionCode"
            case subdivisionName = "SubdivisionName"
        }
    }

    public struct GetAccountLimitRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "type", location: .uri("Type"))
        ]

        /// The limit that you want to get. Valid values include the following:
        ///
        /// 				            MAX_HEALTH_CHECKS_BY_OWNER: The maximum
        /// 					number of health checks that you can create using the current account.
        ///
        /// 				            MAX_HOSTED_ZONES_BY_OWNER: The maximum number
        /// 					of hosted zones that you can create using the current account.
        ///
        /// 				            MAX_REUSABLE_DELEGATION_SETS_BY_OWNER: The
        /// 					maximum number of reusable delegation sets that you can create using the current
        /// 					account.
        ///
        /// 				            MAX_TRAFFIC_POLICIES_BY_OWNER: The maximum
        /// 					number of traffic policies that you can create using the current account.
        ///
        /// 				            MAX_TRAFFIC_POLICY_INSTANCES_BY_OWNER: The
        /// 					maximum number of traffic policy instances that you can create using the current
        /// 					account. (Traffic policy instances are referred to as traffic flow policy
        /// 					records in the Amazon Route 53 console.)
        ///
        public let type: AccountLimitType

        public init(type: AccountLimitType) {
            self.type = type
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAccountLimitResponse: AWSDecodableShape {
        /// The current number of entities that you have created of the specified type. For
        /// 			example, if you specified MAX_HEALTH_CHECKS_BY_OWNER for the value of
        /// 				Type in the request, the value of Count is the current
        /// 			number of health checks that you have created using the current account.
        public let count: Int64
        /// The current setting for the specified limit. For example, if you specified
        /// 				MAX_HEALTH_CHECKS_BY_OWNER for the value of Type in the
        /// 			request, the value of Limit is the maximum number of health checks that you
        /// 			can create using the current account.
        public let limit: AccountLimit

        public init(count: Int64, limit: AccountLimit) {
            self.count = count
            self.limit = limit
        }

        private enum CodingKeys: String, CodingKey {
            case count = "Count"
            case limit = "Limit"
        }
    }

    public struct GetChangeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the change batch request. The value that you specify here is the value that
        /// 				ChangeResourceRecordSets returned in the Id element when
        /// 			you submitted the request.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 6500)
            try self.validate(self.id, name: "id", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetChangeResponse: AWSDecodableShape {
        /// A complex type that contains information about the specified change batch.
        public let changeInfo: ChangeInfo

        public init(changeInfo: ChangeInfo) {
            self.changeInfo = changeInfo
        }

        private enum CodingKeys: String, CodingKey {
            case changeInfo = "ChangeInfo"
        }
    }

    public struct GetCheckerIpRangesRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetCheckerIpRangesResponse: AWSDecodableShape {
        /// A complex type that contains sorted list of IP ranges in CIDR format for Amazon Route
        /// 			53 health checkers.
        @CustomCoding<StandardArrayCoder>
        public var checkerIpRanges: [String]

        public init(checkerIpRanges: [String]) {
            self.checkerIpRanges = checkerIpRanges
        }

        private enum CodingKeys: String, CodingKey {
            case checkerIpRanges = "CheckerIpRanges"
        }
    }

    public struct GetDNSSECRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId"))
        ]

        /// A unique string used to identify a hosted zone.
        public let hostedZoneId: String

        public init(hostedZoneId: String) {
            self.hostedZoneId = hostedZoneId
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDNSSECResponse: AWSDecodableShape {
        /// The key-signing keys (KSKs) in your account.
        @CustomCoding<StandardArrayCoder>
        public var keySigningKeys: [KeySigningKey]
        /// A string repesenting the status of DNSSEC.
        public let status: DNSSECStatus

        public init(keySigningKeys: [KeySigningKey], status: DNSSECStatus) {
            self.keySigningKeys = keySigningKeys
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case keySigningKeys = "KeySigningKeys"
            case status = "Status"
        }
    }

    public struct GetGeoLocationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "continentCode", location: .querystring("continentcode")),
            AWSMemberEncoding(label: "countryCode", location: .querystring("countrycode")),
            AWSMemberEncoding(label: "subdivisionCode", location: .querystring("subdivisioncode"))
        ]

        /// For geolocation resource record sets, a two-letter abbreviation that identifies a
        /// 			continent. Amazon Route 53 supports the following continent codes:
        ///
        /// 				            AF: Africa
        ///
        /// 				            AN: Antarctica
        ///
        /// 				            AS: Asia
        ///
        /// 				            EU: Europe
        ///
        /// 				            OC: Oceania
        ///
        /// 				            NA: North America
        ///
        /// 				            SA: South America
        ///
        public let continentCode: String?
        /// Amazon Route 53 uses the two-letter country codes that are specified in ISO standard 3166-1
        /// 				alpha-2.
        public let countryCode: String?
        /// The code for the subdivision, such as a particular state within the United States. For
        /// 			a list of US state abbreviations, see Appendix B: Two–Letter State and
        /// 				Possession Abbreviations on the United States Postal Service website. For a
        /// 			list of all supported subdivision codes, use the ListGeoLocations
        /// 			API.
        public let subdivisionCode: String?

        public init(continentCode: String? = nil, countryCode: String? = nil, subdivisionCode: String? = nil) {
            self.continentCode = continentCode
            self.countryCode = countryCode
            self.subdivisionCode = subdivisionCode
        }

        public func validate(name: String) throws {
            try self.validate(self.continentCode, name: "continentCode", parent: name, max: 2)
            try self.validate(self.continentCode, name: "continentCode", parent: name, min: 2)
            try self.validate(self.countryCode, name: "countryCode", parent: name, max: 2)
            try self.validate(self.countryCode, name: "countryCode", parent: name, min: 1)
            try self.validate(self.subdivisionCode, name: "subdivisionCode", parent: name, max: 3)
            try self.validate(self.subdivisionCode, name: "subdivisionCode", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetGeoLocationResponse: AWSDecodableShape {
        /// A complex type that contains the codes and full continent, country, and subdivision
        /// 			names for the specified geolocation code.
        public let geoLocationDetails: GeoLocationDetails

        public init(geoLocationDetails: GeoLocationDetails) {
            self.geoLocationDetails = geoLocationDetails
        }

        private enum CodingKeys: String, CodingKey {
            case geoLocationDetails = "GeoLocationDetails"
        }
    }

    public struct GetHealthCheckCountRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetHealthCheckCountResponse: AWSDecodableShape {
        /// The number of health checks associated with the current Amazon Web Services account.
        public let healthCheckCount: Int64

        public init(healthCheckCount: Int64) {
            self.healthCheckCount = healthCheckCount
        }

        private enum CodingKeys: String, CodingKey {
            case healthCheckCount = "HealthCheckCount"
        }
    }

    public struct GetHealthCheckLastFailureReasonRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "healthCheckId", location: .uri("HealthCheckId"))
        ]

        /// The ID for the health check for which you want the last failure reason. When you
        /// 			created the health check, CreateHealthCheck returned the ID in the
        /// 			response, in the HealthCheckId element.
        ///
        /// 			         If you want to get the last failure reason for a calculated health check, you must
        /// 				use the Amazon Route 53 console or the CloudWatch console. You can't use
        /// 					GetHealthCheckLastFailureReason for a calculated health
        /// 				check.
        ///
        public let healthCheckId: String

        public init(healthCheckId: String) {
            self.healthCheckId = healthCheckId
        }

        public func validate(name: String) throws {
            try self.validate(self.healthCheckId, name: "healthCheckId", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetHealthCheckLastFailureReasonResponse: AWSDecodableShape {
        public struct _HealthCheckObservationsEncoding: ArrayCoderProperties { public static let member = "HealthCheckObservation" }

        /// A list that contains one Observation element for each Amazon Route 53
        /// 			health checker that is reporting a last failure reason.
        @CustomCoding<ArrayCoder<_HealthCheckObservationsEncoding, HealthCheckObservation>>
        public var healthCheckObservations: [HealthCheckObservation]

        public init(healthCheckObservations: [HealthCheckObservation]) {
            self.healthCheckObservations = healthCheckObservations
        }

        private enum CodingKeys: String, CodingKey {
            case healthCheckObservations = "HealthCheckObservations"
        }
    }

    public struct GetHealthCheckRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "healthCheckId", location: .uri("HealthCheckId"))
        ]

        /// The identifier that Amazon Route 53 assigned to the health check when you created it.
        /// 			When you add or update a resource record set, you use this value to specify which health
        /// 			check to use. The value can be up to 64 characters long.
        public let healthCheckId: String

        public init(healthCheckId: String) {
            self.healthCheckId = healthCheckId
        }

        public func validate(name: String) throws {
            try self.validate(self.healthCheckId, name: "healthCheckId", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetHealthCheckResponse: AWSDecodableShape {
        /// A complex type that contains information about one health check that is associated
        /// 			with the current Amazon Web Services account.
        public let healthCheck: HealthCheck

        public init(healthCheck: HealthCheck) {
            self.healthCheck = healthCheck
        }

        private enum CodingKeys: String, CodingKey {
            case healthCheck = "HealthCheck"
        }
    }

    public struct GetHealthCheckStatusRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "healthCheckId", location: .uri("HealthCheckId"))
        ]

        /// The ID for the health check that you want the current status for. When you created the
        /// 			health check, CreateHealthCheck returned the ID in the response, in the
        /// 				HealthCheckId element.
        ///
        /// 			         If you want to check the status of a calculated health check, you must use the
        /// 				Amazon Route 53 console or the CloudWatch console. You can't use
        /// 					GetHealthCheckStatus to get the status of a calculated health
        /// 				check.
        ///
        public let healthCheckId: String

        public init(healthCheckId: String) {
            self.healthCheckId = healthCheckId
        }

        public func validate(name: String) throws {
            try self.validate(self.healthCheckId, name: "healthCheckId", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetHealthCheckStatusResponse: AWSDecodableShape {
        public struct _HealthCheckObservationsEncoding: ArrayCoderProperties { public static let member = "HealthCheckObservation" }

        /// A list that contains one HealthCheckObservation element for each Amazon
        /// 			Route 53 health checker that is reporting a status about the health check
        /// 			endpoint.
        @CustomCoding<ArrayCoder<_HealthCheckObservationsEncoding, HealthCheckObservation>>
        public var healthCheckObservations: [HealthCheckObservation]

        public init(healthCheckObservations: [HealthCheckObservation]) {
            self.healthCheckObservations = healthCheckObservations
        }

        private enum CodingKeys: String, CodingKey {
            case healthCheckObservations = "HealthCheckObservations"
        }
    }

    public struct GetHostedZoneCountRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetHostedZoneCountResponse: AWSDecodableShape {
        /// The total number of public and private hosted zones that are associated with the
        /// 			current Amazon Web Services account.
        public let hostedZoneCount: Int64

        public init(hostedZoneCount: Int64) {
            self.hostedZoneCount = hostedZoneCount
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneCount = "HostedZoneCount"
        }
    }

    public struct GetHostedZoneLimitRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId")),
            AWSMemberEncoding(label: "type", location: .uri("Type"))
        ]

        /// The ID of the hosted zone that you want to get a limit for.
        public let hostedZoneId: String
        /// The limit that you want to get. Valid values include the following:
        ///
        /// 				            MAX_RRSETS_BY_ZONE: The maximum number of
        /// 					records that you can create in the specified hosted zone.
        ///
        /// 				            MAX_VPCS_ASSOCIATED_BY_ZONE: The maximum
        /// 					number of Amazon VPCs that you can associate with the specified private hosted
        /// 					zone.
        ///
        public let type: HostedZoneLimitType

        public init(hostedZoneId: String, type: HostedZoneLimitType) {
            self.hostedZoneId = hostedZoneId
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetHostedZoneLimitResponse: AWSDecodableShape {
        /// The current number of entities that you have created of the specified type. For
        /// 			example, if you specified MAX_RRSETS_BY_ZONE for the value of
        /// 				Type in the request, the value of Count is the current
        /// 			number of records that you have created in the specified hosted zone.
        public let count: Int64
        /// The current setting for the specified limit. For example, if you specified
        /// 				MAX_RRSETS_BY_ZONE for the value of Type in the request,
        /// 			the value of Limit is the maximum number of records that you can create in
        /// 			the specified hosted zone.
        public let limit: HostedZoneLimit

        public init(count: Int64, limit: HostedZoneLimit) {
            self.count = count
            self.limit = limit
        }

        private enum CodingKeys: String, CodingKey {
            case count = "Count"
            case limit = "Limit"
        }
    }

    public struct GetHostedZoneRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the hosted zone that you want to get information about.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetHostedZoneResponse: AWSDecodableShape {
        public struct _VPCsEncoding: ArrayCoderProperties { public static let member = "VPC" }

        /// A complex type that lists the Amazon Route 53 name servers for the specified hosted
        /// 			zone.
        public let delegationSet: DelegationSet?
        /// A complex type that contains general information about the specified hosted
        /// 			zone.
        public let hostedZone: HostedZone
        /// A complex type that contains information about the VPCs that are associated with the
        /// 			specified hosted zone.
        @OptionalCustomCoding<ArrayCoder<_VPCsEncoding, VPC>>
        public var vpCs: [VPC]?

        public init(delegationSet: DelegationSet? = nil, hostedZone: HostedZone, vpCs: [VPC]? = nil) {
            self.delegationSet = delegationSet
            self.hostedZone = hostedZone
            self.vpCs = vpCs
        }

        private enum CodingKeys: String, CodingKey {
            case delegationSet = "DelegationSet"
            case hostedZone = "HostedZone"
            case vpCs = "VPCs"
        }
    }

    public struct GetQueryLoggingConfigRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the configuration for DNS query logging that you want to get information
        /// 			about.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetQueryLoggingConfigResponse: AWSDecodableShape {
        /// A complex type that contains information about the query logging configuration that
        /// 			you specified in a GetQueryLoggingConfig request.
        public let queryLoggingConfig: QueryLoggingConfig

        public init(queryLoggingConfig: QueryLoggingConfig) {
            self.queryLoggingConfig = queryLoggingConfig
        }

        private enum CodingKeys: String, CodingKey {
            case queryLoggingConfig = "QueryLoggingConfig"
        }
    }

    public struct GetReusableDelegationSetLimitRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "delegationSetId", location: .uri("DelegationSetId")),
            AWSMemberEncoding(label: "type", location: .uri("Type"))
        ]

        /// The ID of the delegation set that you want to get the limit for.
        public let delegationSetId: String
        /// Specify MAX_ZONES_BY_REUSABLE_DELEGATION_SET to get the maximum number of
        /// 			hosted zones that you can associate with the specified reusable delegation set.
        public let type: ReusableDelegationSetLimitType

        public init(delegationSetId: String, type: ReusableDelegationSetLimitType) {
            self.delegationSetId = delegationSetId
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.delegationSetId, name: "delegationSetId", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetReusableDelegationSetLimitResponse: AWSDecodableShape {
        /// The current number of hosted zones that you can associate with the specified reusable
        /// 			delegation set.
        public let count: Int64
        /// The current setting for the limit on hosted zones that you can associate with the
        /// 			specified reusable delegation set.
        public let limit: ReusableDelegationSetLimit

        public init(count: Int64, limit: ReusableDelegationSetLimit) {
            self.count = count
            self.limit = limit
        }

        private enum CodingKeys: String, CodingKey {
            case count = "Count"
            case limit = "Limit"
        }
    }

    public struct GetReusableDelegationSetRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the reusable delegation set that you want to get a list of name servers
        /// 			for.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetReusableDelegationSetResponse: AWSDecodableShape {
        /// A complex type that contains information about the reusable delegation set.
        public let delegationSet: DelegationSet

        public init(delegationSet: DelegationSet) {
            self.delegationSet = delegationSet
        }

        private enum CodingKeys: String, CodingKey {
            case delegationSet = "DelegationSet"
        }
    }

    public struct GetTrafficPolicyInstanceCountRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetTrafficPolicyInstanceCountResponse: AWSDecodableShape {
        /// The number of traffic policy instances that are associated with the current Amazon Web Services account.
        public let trafficPolicyInstanceCount: Int

        public init(trafficPolicyInstanceCount: Int) {
            self.trafficPolicyInstanceCount = trafficPolicyInstanceCount
        }

        private enum CodingKeys: String, CodingKey {
            case trafficPolicyInstanceCount = "TrafficPolicyInstanceCount"
        }
    }

    public struct GetTrafficPolicyInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the traffic policy instance that you want to get information about.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetTrafficPolicyInstanceResponse: AWSDecodableShape {
        /// A complex type that contains settings for the traffic policy instance.
        public let trafficPolicyInstance: TrafficPolicyInstance

        public init(trafficPolicyInstance: TrafficPolicyInstance) {
            self.trafficPolicyInstance = trafficPolicyInstance
        }

        private enum CodingKeys: String, CodingKey {
            case trafficPolicyInstance = "TrafficPolicyInstance"
        }
    }

    public struct GetTrafficPolicyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "version", location: .uri("Version"))
        ]

        /// The ID of the traffic policy that you want to get information about.
        public let id: String
        /// The version number of the traffic policy that you want to get information
        /// 			about.
        public let version: Int

        public init(id: String, version: Int) {
            self.id = id
            self.version = version
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
            try self.validate(self.version, name: "version", parent: name, max: 1000)
            try self.validate(self.version, name: "version", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetTrafficPolicyResponse: AWSDecodableShape {
        /// A complex type that contains settings for the specified traffic policy.
        public let trafficPolicy: TrafficPolicy

        public init(trafficPolicy: TrafficPolicy) {
            self.trafficPolicy = trafficPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case trafficPolicy = "TrafficPolicy"
        }
    }

    public struct HealthCheck: AWSDecodableShape {
        /// A unique string that you specified when you created the health check.
        public let callerReference: String
        /// A complex type that contains information about the CloudWatch alarm that Amazon Route
        /// 			53 is monitoring for this health check.
        public let cloudWatchAlarmConfiguration: CloudWatchAlarmConfiguration?
        /// A complex type that contains detailed information about one health check.
        public let healthCheckConfig: HealthCheckConfig
        /// The version of the health check. You can optionally pass this value in a call to
        /// 				UpdateHealthCheck to prevent overwriting another change to the health
        /// 			check.
        public let healthCheckVersion: Int64
        /// The identifier that Amazon Route 53 assigned to the health check when you created it.
        /// 			When you add or update a resource record set, you use this value to specify which health
        /// 			check to use. The value can be up to 64 characters long.
        public let id: String
        /// If the health check was created by another service, the service that created the
        /// 			health check. When a health check is created by another service, you can't edit or
        /// 			delete it using Amazon Route 53.
        public let linkedService: LinkedService?

        public init(callerReference: String, cloudWatchAlarmConfiguration: CloudWatchAlarmConfiguration? = nil, healthCheckConfig: HealthCheckConfig, healthCheckVersion: Int64, id: String, linkedService: LinkedService? = nil) {
            self.callerReference = callerReference
            self.cloudWatchAlarmConfiguration = cloudWatchAlarmConfiguration
            self.healthCheckConfig = healthCheckConfig
            self.healthCheckVersion = healthCheckVersion
            self.id = id
            self.linkedService = linkedService
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case cloudWatchAlarmConfiguration = "CloudWatchAlarmConfiguration"
            case healthCheckConfig = "HealthCheckConfig"
            case healthCheckVersion = "HealthCheckVersion"
            case id = "Id"
            case linkedService = "LinkedService"
        }
    }

    public struct HealthCheckConfig: AWSEncodableShape & AWSDecodableShape {
        public struct _ChildHealthChecksEncoding: ArrayCoderProperties { public static let member = "ChildHealthCheck" }
        public struct _RegionsEncoding: ArrayCoderProperties { public static let member = "Region" }

        /// A complex type that identifies the CloudWatch alarm that you want Amazon Route 53
        /// 			health checkers to use to determine whether the specified health check is
        /// 			healthy.
        public let alarmIdentifier: AlarmIdentifier?
        /// (CALCULATED Health Checks Only) A complex type that contains one
        /// 				ChildHealthCheck element for each health check that you want to
        /// 			associate with a CALCULATED health check.
        @OptionalCustomCoding<ArrayCoder<_ChildHealthChecksEncoding, String>>
        public var childHealthChecks: [String]?
        /// Stops Route 53 from performing health checks. When you disable a health check, here's
        /// 			what happens:
        ///
        /// 				            Health checks that check the health of
        /// 						endpoints: Route 53 stops submitting requests to your
        /// 					application, server, or other resource.
        ///
        /// 				            Calculated health checks: Route 53 stops
        /// 					aggregating the status of the referenced health checks.
        ///
        /// 				            Health checks that monitor CloudWatch alarms:
        /// 					Route 53 stops monitoring the corresponding CloudWatch metrics.
        ///
        /// 		       After you disable a health check, Route 53 considers the status of the health check to
        /// 			always be healthy. If you configured DNS failover, Route 53 continues to route traffic
        /// 			to the corresponding resources. If you want to stop routing traffic to a resource,
        /// 			change the value of Inverted.
        /// 		       Charges for a health check still apply when the health check is disabled. For more
        /// 			information, see Amazon Route 53
        /// 				Pricing.
        public let disabled: Bool?
        /// Specify whether you want Amazon Route 53 to send the value of
        /// 				FullyQualifiedDomainName to the endpoint in the
        /// 				client_hello message during TLS negotiation. This allows the endpoint
        /// 			to respond to HTTPS health check requests with the applicable SSL/TLS
        /// 			certificate.
        /// 		       Some endpoints require that HTTPS requests include the host name in the
        /// 				client_hello message. If you don't enable SNI, the status of the health
        /// 			check will be SSL alert handshake_failure. A health check can also have
        /// 			that status for other reasons. If SNI is enabled and you're still getting the error,
        /// 			check the SSL/TLS configuration on your endpoint and confirm that your certificate is
        /// 			valid.
        /// 		       The SSL/TLS certificate on your endpoint includes a domain name in the Common
        /// 				Name field and possibly several more in the Subject Alternative
        /// 				Names field. One of the domain names in the certificate should match the
        /// 			value that you specify for FullyQualifiedDomainName. If the endpoint
        /// 			responds to the client_hello message with a certificate that does not
        /// 			include the domain name that you specified in FullyQualifiedDomainName, a
        /// 			health checker will retry the handshake. In the second attempt, the health checker will
        /// 			omit FullyQualifiedDomainName from the client_hello
        /// 			message.
        public let enableSNI: Bool?
        /// The number of consecutive health checks that an endpoint must pass or fail for Amazon
        /// 			Route 53 to change the current status of the endpoint from unhealthy to healthy or vice
        /// 			versa. For more information, see How Amazon Route 53 Determines Whether an Endpoint Is Healthy in the
        /// 				Amazon Route 53 Developer Guide.
        /// 		       If you don't specify a value for FailureThreshold, the default value is
        /// 			three health checks.
        public let failureThreshold: Int?
        /// Amazon Route 53 behavior depends on whether you specify a value for
        /// 				IPAddress.
        /// 		        If you specify a value for
        /// 			         IPAddress:
        /// 		       Amazon Route 53 sends health check requests to the specified IPv4 or IPv6 address and
        /// 			passes the value of FullyQualifiedDomainName in the Host
        /// 			header for all health checks except TCP health checks. This is typically the fully
        /// 			qualified DNS name of the endpoint on which you want Route 53 to perform health
        /// 			checks.
        /// 		       When Route 53 checks the health of an endpoint, here is how it constructs the
        /// 				Host header:
        ///
        /// 				           If you specify a value of 80 for Port and
        /// 						HTTP or HTTP_STR_MATCH for Type,
        /// 					Route 53 passes the value of FullyQualifiedDomainName to the
        /// 					endpoint in the Host header.
        ///
        /// 				           If you specify a value of 443 for Port and
        /// 						HTTPS or HTTPS_STR_MATCH for Type,
        /// 					Route 53 passes the value of FullyQualifiedDomainName to the
        /// 					endpoint in the Host header.
        ///
        /// 				           If you specify another value for Port and any value except
        /// 						TCP for Type, Route 53 passes
        /// 						FullyQualifiedDomainName:Port to the endpoint in the
        /// 						Host header.
        ///
        /// 		       If you don't specify a value for FullyQualifiedDomainName, Route 53
        /// 			substitutes the value of IPAddress in the Host header in each
        /// 			of the preceding cases.
        /// 		        If you don't specify a value for
        /// 			         IPAddress:
        /// 		       Route 53 sends a DNS request to the domain that you specify for
        /// 				FullyQualifiedDomainName at the interval that you specify for
        /// 				RequestInterval. Using an IPv4 address that DNS returns, Route 53 then
        /// 			checks the health of the endpoint.
        ///
        /// 			         If you don't specify a value for IPAddress, Route 53 uses only IPv4
        /// 				to send health checks to the endpoint. If there's no resource record set with a type
        /// 				of A for the name that you specify for FullyQualifiedDomainName, the
        /// 				health check fails with a "DNS resolution failed" error.
        ///
        /// 		       If you want to check the health of weighted, latency, or failover resource record sets
        /// 			and you choose to specify the endpoint only by FullyQualifiedDomainName, we
        /// 			recommend that you create a separate health check for each endpoint. For example, create
        /// 			a health check for each HTTP server that is serving content for www.example.com. For the
        /// 			value of FullyQualifiedDomainName, specify the domain name of the server
        /// 			(such as us-east-2-www.example.com), not the name of the resource record sets
        /// 			(www.example.com).
        ///
        /// 			         In this configuration, if you create a health check for which the value of
        /// 					FullyQualifiedDomainName matches the name of the resource record
        /// 				sets and you then associate the health check with those resource record sets, health
        /// 				check results will be unpredictable.
        ///
        /// 		       In addition, if the value that you specify for Type is HTTP,
        /// 				HTTPS, HTTP_STR_MATCH, or HTTPS_STR_MATCH,
        /// 			Route 53 passes the value of FullyQualifiedDomainName in the
        /// 				Host header, as it does when you specify a value for
        /// 				IPAddress. If the value of Type is TCP, Route
        /// 			53 doesn't pass a Host header.
        public let fullyQualifiedDomainName: String?
        /// The number of child health checks that are associated with a CALCULATED
        /// 			health check that Amazon Route 53 must consider healthy for the CALCULATED
        /// 			health check to be considered healthy. To specify the child health checks that you want
        /// 			to associate with a CALCULATED health check, use the ChildHealthChecks element.
        /// 		       Note the following:
        ///
        /// 				           If you specify a number greater than the number of child health checks, Route
        /// 					53 always considers this health check to be unhealthy.
        ///
        /// 				           If you specify 0, Route 53 always considers this health check to
        /// 					be healthy.
        ///
        public let healthThreshold: Int?
        /// When CloudWatch has insufficient data about the metric to determine the alarm state,
        /// 			the status that you want Amazon Route 53 to assign to the health check:
        ///
        /// 				            Healthy: Route 53 considers the health check to be
        /// 					healthy.
        ///
        /// 				            Unhealthy: Route 53 considers the health check to be
        /// 					unhealthy.
        ///
        /// 				            LastKnownStatus: Route 53 uses the status of the health check
        /// 					from the last time that CloudWatch had sufficient data to determine the alarm
        /// 					state. For new health checks that have no last known status, the default status
        /// 					for the health check is healthy.
        ///
        public let insufficientDataHealthStatus: InsufficientDataHealthStatus?
        /// Specify whether you want Amazon Route 53 to invert the status of a health check, for
        /// 			example, to consider a health check unhealthy when it otherwise would be considered
        /// 			healthy.
        public let inverted: Bool?
        /// The IPv4 or IPv6 IP address of the endpoint that you want Amazon Route 53 to perform
        /// 			health checks on. If you don't specify a value for IPAddress, Route 53
        /// 			sends a DNS request to resolve the domain name that you specify in
        /// 				FullyQualifiedDomainName at the interval that you specify in
        /// 				RequestInterval. Using an IP address returned by DNS, Route 53 then
        /// 			checks the health of the endpoint.
        /// 		       Use one of the following formats for the value of IPAddress:
        ///
        /// 				            IPv4 address: four values between 0 and 255,
        /// 					separated by periods (.), for example, 192.0.2.44.
        ///
        /// 				            IPv6 address: eight groups of four
        /// 					hexadecimal values, separated by colons (:), for example,
        /// 						2001:0db8:85a3:0000:0000:abcd:0001:2345. You can also shorten
        /// 					IPv6 addresses as described in RFC 5952, for example,
        /// 						2001:db8:85a3::abcd:1:2345.
        ///
        /// 		       If the endpoint is an EC2 instance, we recommend that you create an Elastic IP
        /// 			address, associate it with your EC2 instance, and specify the Elastic IP address for
        /// 				IPAddress. This ensures that the IP address of your instance will never
        /// 			change.
        /// 		       For more information, see FullyQualifiedDomainName.
        /// 		       Constraints: Route 53 can't check the health of endpoints for which the IP address is
        /// 			in local, private, non-routable, or multicast ranges. For more information about IP
        /// 			addresses for which you can't create health checks, see the following documents:
        ///
        /// 				            RFC 5735, Special Use IPv4
        /// 						Addresses
        ///
        /// 				            RFC 6598, IANA-Reserved IPv4
        /// 						Prefix for Shared Address Space
        ///
        /// 				            RFC 5156, Special-Use IPv6
        /// 						Addresses
        ///
        /// 		       When the value of Type is CALCULATED or
        /// 				CLOUDWATCH_METRIC, omit IPAddress.
        public let ipAddress: String?
        /// Specify whether you want Amazon Route 53 to measure the latency between health
        /// 			checkers in multiple Amazon Web Services regions and your endpoint, and to display
        /// 			CloudWatch latency graphs on the Health Checks page in
        /// 			the Route 53 console.
        ///
        /// 			         You can't change the value of MeasureLatency after you create a
        /// 				health check.
        ///
        public let measureLatency: Bool?
        /// The port on the endpoint that you want Amazon Route 53 to perform health checks
        /// 			on.
        ///
        /// 			         Don't specify a value for Port when you specify a value for
        /// 					Type of CLOUDWATCH_METRIC or
        /// 				CALCULATED.
        ///
        public let port: Int?
        /// A complex type that contains one Region element for each region from
        /// 			which you want Amazon Route 53 health checkers to check the specified endpoint.
        /// 		       If you don't specify any regions, Route 53 health checkers automatically performs
        /// 			checks from all of the regions that are listed under Valid
        /// 				Values.
        /// 		       If you update a health check to remove a region that has been performing health
        /// 			checks, Route 53 will briefly continue to perform checks from that region to ensure that
        /// 			some health checkers are always checking the endpoint (for example, if you replace three
        /// 			regions with four different regions).
        @OptionalCustomCoding<ArrayCoder<_RegionsEncoding, HealthCheckRegion>>
        public var regions: [HealthCheckRegion]?
        /// The number of seconds between the time that Amazon Route 53 gets a response from your
        /// 			endpoint and the time that it sends the next health check request. Each Route 53 health
        /// 			checker makes requests at this interval.
        ///
        /// 			         You can't change the value of RequestInterval after you create a
        /// 				health check.
        ///
        /// 		       If you don't specify a value for RequestInterval, the default value is
        /// 				30 seconds.
        public let requestInterval: Int?
        /// The path, if any, that you want Amazon Route 53 to request when performing health
        /// 			checks. The path can be any value for which your endpoint will return an HTTP status
        /// 			code of 2xx or 3xx when the endpoint is healthy, for example, the file
        /// 			/docs/route53-health-check.html. You can also include query string parameters, for
        /// 			example, /welcome.html?language=jp&login=y.
        public let resourcePath: String?
        /// The Amazon Resource Name (ARN) for the Route 53 Application Recovery Controller
        /// 			routing control.
        /// 		       For more information about Route 53 Application Recovery Controller, see Route 53 Application Recovery Controller Developer Guide..
        public let routingControlArn: String?
        /// If the value of Type is HTTP_STR_MATCH or HTTPS_STR_MATCH,
        /// 			the string that you want Amazon Route 53 to search for in the response body from the
        /// 			specified resource. If the string appears in the response body, Route 53 considers the
        /// 			resource healthy.
        /// 		       Route 53 considers case when searching for SearchString in the response
        /// 			body.
        public let searchString: String?
        /// The type of health check that you want to create, which indicates how Amazon Route 53
        /// 			determines whether an endpoint is healthy.
        ///
        /// 			         You can't change the value of Type after you create a health
        /// 				check.
        ///
        /// 		       You can create the following types of health checks:
        ///
        /// 				            HTTP: Route 53 tries to establish a TCP
        /// 					connection. If successful, Route 53 submits an HTTP request and waits for an
        /// 					HTTP status code of 200 or greater and less than 400.
        ///
        /// 				            HTTPS: Route 53 tries to establish a TCP
        /// 					connection. If successful, Route 53 submits an HTTPS request and waits for an
        /// 					HTTP status code of 200 or greater and less than 400.
        ///
        /// 					             If you specify HTTPS for the value of Type, the
        /// 						endpoint must support TLS v1.0 or later.
        ///
        ///
        /// 				            HTTP_STR_MATCH: Route 53 tries to establish a
        /// 					TCP connection. If successful, Route 53 submits an HTTP request and searches the
        /// 					first 5,120 bytes of the response body for the string that you specify in
        /// 						SearchString.
        ///
        /// 				            HTTPS_STR_MATCH: Route 53 tries to establish
        /// 					a TCP connection. If successful, Route 53 submits an HTTPS request
        /// 					and searches the first 5,120 bytes of the response body for the string that you
        /// 					specify in SearchString.
        ///
        /// 				            TCP: Route 53 tries to establish a TCP
        /// 					connection.
        ///
        /// 				            CLOUDWATCH_METRIC: The health check is
        /// 					associated with a CloudWatch alarm. If the state of the alarm is
        /// 					OK, the health check is considered healthy. If the state is
        /// 						ALARM, the health check is considered unhealthy. If CloudWatch
        /// 					doesn't have sufficient data to determine whether the state is OK
        /// 					or ALARM, the health check status depends on the setting for
        /// 						InsufficientDataHealthStatus: Healthy,
        /// 						Unhealthy, or LastKnownStatus.
        ///
        /// 				            CALCULATED: For health checks that monitor
        /// 					the status of other health checks, Route 53 adds up the number of health checks
        /// 					that Route 53 health checkers consider to be healthy and compares that number
        /// 					with the value of HealthThreshold.
        ///
        /// 				            RECOVERY_CONTROL: The health check is
        /// 					assocated with a Route53 Application Recovery Controller routing control. If the
        /// 					routing control state is ON, the health check is considered
        /// 					healthy. If the state is OFF, the health check is considered
        /// 					unhealthy.
        ///
        /// 		       For more information, see How Route 53 Determines Whether an Endpoint Is Healthy in the
        /// 				Amazon Route 53 Developer Guide.
        public let type: HealthCheckType

        public init(alarmIdentifier: AlarmIdentifier? = nil, childHealthChecks: [String]? = nil, disabled: Bool? = nil, enableSNI: Bool? = nil, failureThreshold: Int? = nil, fullyQualifiedDomainName: String? = nil, healthThreshold: Int? = nil, insufficientDataHealthStatus: InsufficientDataHealthStatus? = nil, inverted: Bool? = nil, ipAddress: String? = nil, measureLatency: Bool? = nil, port: Int? = nil, regions: [HealthCheckRegion]? = nil, requestInterval: Int? = nil, resourcePath: String? = nil, routingControlArn: String? = nil, searchString: String? = nil, type: HealthCheckType) {
            self.alarmIdentifier = alarmIdentifier
            self.childHealthChecks = childHealthChecks
            self.disabled = disabled
            self.enableSNI = enableSNI
            self.failureThreshold = failureThreshold
            self.fullyQualifiedDomainName = fullyQualifiedDomainName
            self.healthThreshold = healthThreshold
            self.insufficientDataHealthStatus = insufficientDataHealthStatus
            self.inverted = inverted
            self.ipAddress = ipAddress
            self.measureLatency = measureLatency
            self.port = port
            self.regions = regions
            self.requestInterval = requestInterval
            self.resourcePath = resourcePath
            self.routingControlArn = routingControlArn
            self.searchString = searchString
            self.type = type
        }

        public func validate(name: String) throws {
            try self.alarmIdentifier?.validate(name: "\(name).alarmIdentifier")
            try self.childHealthChecks?.forEach {
                try validate($0, name: "childHealthChecks[]", parent: name, max: 64)
            }
            try self.validate(self.childHealthChecks, name: "childHealthChecks", parent: name, max: 256)
            try self.validate(self.failureThreshold, name: "failureThreshold", parent: name, max: 10)
            try self.validate(self.failureThreshold, name: "failureThreshold", parent: name, min: 1)
            try self.validate(self.fullyQualifiedDomainName, name: "fullyQualifiedDomainName", parent: name, max: 255)
            try self.validate(self.healthThreshold, name: "healthThreshold", parent: name, max: 256)
            try self.validate(self.healthThreshold, name: "healthThreshold", parent: name, min: 0)
            try self.validate(self.ipAddress, name: "ipAddress", parent: name, max: 45)
            try self.validate(self.ipAddress, name: "ipAddress", parent: name, pattern: "^(^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)$")
            try self.validate(self.port, name: "port", parent: name, max: 65535)
            try self.validate(self.port, name: "port", parent: name, min: 1)
            try self.validate(self.regions, name: "regions", parent: name, max: 64)
            try self.validate(self.regions, name: "regions", parent: name, min: 3)
            try self.validate(self.requestInterval, name: "requestInterval", parent: name, max: 30)
            try self.validate(self.requestInterval, name: "requestInterval", parent: name, min: 10)
            try self.validate(self.resourcePath, name: "resourcePath", parent: name, max: 255)
            try self.validate(self.routingControlArn, name: "routingControlArn", parent: name, max: 255)
            try self.validate(self.routingControlArn, name: "routingControlArn", parent: name, min: 1)
            try self.validate(self.searchString, name: "searchString", parent: name, max: 255)
        }

        private enum CodingKeys: String, CodingKey {
            case alarmIdentifier = "AlarmIdentifier"
            case childHealthChecks = "ChildHealthChecks"
            case disabled = "Disabled"
            case enableSNI = "EnableSNI"
            case failureThreshold = "FailureThreshold"
            case fullyQualifiedDomainName = "FullyQualifiedDomainName"
            case healthThreshold = "HealthThreshold"
            case insufficientDataHealthStatus = "InsufficientDataHealthStatus"
            case inverted = "Inverted"
            case ipAddress = "IPAddress"
            case measureLatency = "MeasureLatency"
            case port = "Port"
            case regions = "Regions"
            case requestInterval = "RequestInterval"
            case resourcePath = "ResourcePath"
            case routingControlArn = "RoutingControlArn"
            case searchString = "SearchString"
            case type = "Type"
        }
    }

    public struct HealthCheckObservation: AWSDecodableShape {
        /// The IP address of the Amazon Route 53 health checker that provided the failure reason
        /// 			in StatusReport.
        public let ipAddress: String?
        /// The region of the Amazon Route 53 health checker that provided the status in
        /// 				StatusReport.
        public let region: HealthCheckRegion?
        /// A complex type that contains the last failure reason as reported by one Amazon Route
        /// 			53 health checker and the time of the failed health check.
        public let statusReport: StatusReport?

        public init(ipAddress: String? = nil, region: HealthCheckRegion? = nil, statusReport: StatusReport? = nil) {
            self.ipAddress = ipAddress
            self.region = region
            self.statusReport = statusReport
        }

        private enum CodingKeys: String, CodingKey {
            case ipAddress = "IPAddress"
            case region = "Region"
            case statusReport = "StatusReport"
        }
    }

    public struct HostedZone: AWSDecodableShape {
        /// The value that you specified for CallerReference when you created the
        /// 			hosted zone.
        public let callerReference: String
        /// A complex type that includes the Comment and PrivateZone
        /// 			elements. If you omitted the HostedZoneConfig and Comment
        /// 			elements from the request, the Config and Comment elements
        /// 			don't appear in the response.
        public let config: HostedZoneConfig?
        /// The ID that Amazon Route 53 assigned to the hosted zone when you created it.
        public let id: String
        /// If the hosted zone was created by another service, the service that created the hosted
        /// 			zone. When a hosted zone is created by another service, you can't edit or delete it
        /// 			using Route 53.
        public let linkedService: LinkedService?
        /// The name of the domain. For public hosted zones, this is the name that you have
        /// 			registered with your DNS registrar.
        /// 		       For information about how to specify characters other than a-z,
        /// 				0-9, and - (hyphen) and how to specify internationalized
        /// 			domain names, see CreateHostedZone.
        public let name: String
        /// The number of resource record sets in the hosted zone.
        public let resourceRecordSetCount: Int64?

        public init(callerReference: String, config: HostedZoneConfig? = nil, id: String, linkedService: LinkedService? = nil, name: String, resourceRecordSetCount: Int64? = nil) {
            self.callerReference = callerReference
            self.config = config
            self.id = id
            self.linkedService = linkedService
            self.name = name
            self.resourceRecordSetCount = resourceRecordSetCount
        }

        private enum CodingKeys: String, CodingKey {
            case callerReference = "CallerReference"
            case config = "Config"
            case id = "Id"
            case linkedService = "LinkedService"
            case name = "Name"
            case resourceRecordSetCount = "ResourceRecordSetCount"
        }
    }

    public struct HostedZoneConfig: AWSEncodableShape & AWSDecodableShape {
        /// Any comments that you want to include about the hosted zone.
        public let comment: String?
        /// A value that indicates whether this is a private hosted zone.
        public let privateZone: Bool?

        public init(comment: String? = nil, privateZone: Bool? = nil) {
            self.comment = comment
            self.privateZone = privateZone
        }

        public func validate(name: String) throws {
            try self.validate(self.comment, name: "comment", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
            case privateZone = "PrivateZone"
        }
    }

    public struct HostedZoneLimit: AWSDecodableShape {
        /// The limit that you requested. Valid values include the following:
        ///
        /// 				            MAX_RRSETS_BY_ZONE: The maximum number of
        /// 					records that you can create in the specified hosted zone.
        ///
        /// 				            MAX_VPCS_ASSOCIATED_BY_ZONE: The maximum
        /// 					number of Amazon VPCs that you can associate with the specified private hosted
        /// 					zone.
        ///
        public let type: HostedZoneLimitType
        /// The current value for the limit that is specified by Type.
        public let value: Int64

        public init(type: HostedZoneLimitType, value: Int64) {
            self.type = type
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case type = "Type"
            case value = "Value"
        }
    }

    public struct HostedZoneOwner: AWSDecodableShape {
        /// If the hosted zone was created by an Amazon Web Services account, or was created by an
        /// 				Amazon Web Services service that creates hosted zones using the current account,
        /// 				OwningAccount contains the account ID of that account. For example,
        /// 			when you use Cloud Map to create a hosted zone, Cloud Map creates the hosted
        /// 			zone using the current Amazon Web Services account.
        public let owningAccount: String?
        /// If an Amazon Web Services service uses its own account to create a hosted zone and
        /// 			associate the specified VPC with that hosted zone, OwningService contains
        /// 			an abbreviation that identifies the service. For example, if Amazon Elastic File System
        /// 			(Amazon EFS) created a hosted zone and associated a VPC with the hosted zone, the value
        /// 			of OwningService is efs.amazonaws.com.
        public let owningService: String?

        public init(owningAccount: String? = nil, owningService: String? = nil) {
            self.owningAccount = owningAccount
            self.owningService = owningService
        }

        private enum CodingKeys: String, CodingKey {
            case owningAccount = "OwningAccount"
            case owningService = "OwningService"
        }
    }

    public struct HostedZoneSummary: AWSDecodableShape {
        /// The Route 53 hosted zone ID of a private hosted zone that the specified VPC is
        /// 			associated with.
        public let hostedZoneId: String
        /// The name of the private hosted zone, such as example.com.
        public let name: String
        /// The owner of a private hosted zone that the specified VPC is associated with. The
        /// 			owner can be either an Amazon Web Services account or an Amazon Web Services
        /// 			service.
        public let owner: HostedZoneOwner

        public init(hostedZoneId: String, name: String, owner: HostedZoneOwner) {
            self.hostedZoneId = hostedZoneId
            self.name = name
            self.owner = owner
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneId = "HostedZoneId"
            case name = "Name"
            case owner = "Owner"
        }
    }

    public struct KeySigningKey: AWSDecodableShape {
        /// The date when the key-signing key (KSK) was created.
        public let createdDate: Date?
        /// A string used to represent the delegation signer digest algorithm. This value must
        /// 			follow the guidelines provided by RFC-8624 Section 3.3.
        ///
        public let digestAlgorithmMnemonic: String?
        /// An integer used to represent the delegation signer digest algorithm. This value must
        /// 			follow the guidelines provided by RFC-8624 Section
        /// 			3.3.
        public let digestAlgorithmType: Int?
        /// A cryptographic digest of a DNSKEY resource record (RR). DNSKEY records are used to
        /// 			publish the public key that resolvers can use to verify DNSSEC signatures that are used
        /// 			to secure certain kinds of information provided by the DNS system.
        public let digestValue: String?
        /// A string that represents a DNSKEY record.
        public let dnskeyRecord: String?
        /// A string that represents a delegation signer (DS) record.
        public let dsRecord: String?
        /// An integer that specifies how the key is used. For key-signing key (KSK), this value
        /// 			is always 257.
        public let flag: Int?
        /// An integer used to identify the DNSSEC record for the domain name. The process used to
        /// 			calculate the value is described in RFC-4034 Appendix B.
        public let keyTag: Int?
        /// The Amazon resource name (ARN) used to identify the customer managed key in Key Management Service (KMS). The KmsArn must be unique for each
        /// 			key-signing key (KSK) in a single hosted zone.
        /// 		       You must configure the customer managed key as follows:
        /// 		        Status
        /// 					          Enabled
        /// 				         Key spec
        /// 					          ECC_NIST_P256
        /// 				         Key usage
        /// 					          Sign and verify
        /// 				         Key policy
        /// 					          The key policy must give permission for the following actions:
        ///
        /// 							              DescribeKey
        ///
        /// 							              GetPublicKey
        ///
        /// 							              Sign
        ///
        /// 					          The key policy must also include the Amazon Route 53 service in the
        /// 						principal for your account. Specify the following:
        ///
        /// 							               "Service": "dnssec-route53.amazonaws.com"
        ///
        ///
        /// 		       For more information about working with the customer managed key in KMS, see Key Management Service
        /// 				concepts.
        public let kmsArn: String?
        /// The last time that the key-signing key (KSK) was changed.
        public let lastModifiedDate: Date?
        /// A string used to identify a key-signing key (KSK). Name can include
        /// 			numbers, letters, and underscores (_). Name must be unique for each
        /// 			key-signing key in the same hosted zone.
        public let name: String?
        /// The public key, represented as a Base64 encoding, as required by  RFC-4034 Page 5.
        public let publicKey: String?
        /// A string used to represent the signing algorithm. This value must follow the
        /// 			guidelines provided by RFC-8624 Section 3.1.
        public let signingAlgorithmMnemonic: String?
        /// An integer used to represent the signing algorithm. This value must follow the
        /// 			guidelines provided by RFC-8624 Section 3.1.
        public let signingAlgorithmType: Int?
        /// A string that represents the current key-signing key (KSK) status.
        /// 		       Status can have one of the following values:
        /// 		        ACTIVE
        /// 					          The KSK is being used for signing.
        /// 				         INACTIVE
        /// 					          The KSK is not being used for signing.
        /// 				         DELETING
        /// 					          The KSK is in the process of being deleted.
        /// 				         ACTION_NEEDED
        /// 					          There is a problem with the KSK that requires you to take action to
        /// 						resolve. For example, the customer managed key might have been deleted,
        /// 						or the permissions for the customer managed key might have been
        /// 						changed.
        /// 				         INTERNAL_FAILURE
        /// 					          There was an error during a request. Before you can continue to work with
        /// 						DNSSEC signing, including actions that involve this KSK, you must correct
        /// 						the problem. For example, you may need to activate or deactivate the
        /// 						KSK.
        ///
        public let status: String?
        /// The status message provided for the following key-signing key (KSK) statuses:
        /// 				ACTION_NEEDED or INTERNAL_FAILURE. The status message
        /// 			includes information about what the problem might be and steps that you can take to
        /// 			correct the issue.
        public let statusMessage: String?

        public init(createdDate: Date? = nil, digestAlgorithmMnemonic: String? = nil, digestAlgorithmType: Int? = nil, digestValue: String? = nil, dnskeyRecord: String? = nil, dsRecord: String? = nil, flag: Int? = nil, keyTag: Int? = nil, kmsArn: String? = nil, lastModifiedDate: Date? = nil, name: String? = nil, publicKey: String? = nil, signingAlgorithmMnemonic: String? = nil, signingAlgorithmType: Int? = nil, status: String? = nil, statusMessage: String? = nil) {
            self.createdDate = createdDate
            self.digestAlgorithmMnemonic = digestAlgorithmMnemonic
            self.digestAlgorithmType = digestAlgorithmType
            self.digestValue = digestValue
            self.dnskeyRecord = dnskeyRecord
            self.dsRecord = dsRecord
            self.flag = flag
            self.keyTag = keyTag
            self.kmsArn = kmsArn
            self.lastModifiedDate = lastModifiedDate
            self.name = name
            self.publicKey = publicKey
            self.signingAlgorithmMnemonic = signingAlgorithmMnemonic
            self.signingAlgorithmType = signingAlgorithmType
            self.status = status
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case createdDate = "CreatedDate"
            case digestAlgorithmMnemonic = "DigestAlgorithmMnemonic"
            case digestAlgorithmType = "DigestAlgorithmType"
            case digestValue = "DigestValue"
            case dnskeyRecord = "DNSKEYRecord"
            case dsRecord = "DSRecord"
            case flag = "Flag"
            case keyTag = "KeyTag"
            case kmsArn = "KmsArn"
            case lastModifiedDate = "LastModifiedDate"
            case name = "Name"
            case publicKey = "PublicKey"
            case signingAlgorithmMnemonic = "SigningAlgorithmMnemonic"
            case signingAlgorithmType = "SigningAlgorithmType"
            case status = "Status"
            case statusMessage = "StatusMessage"
        }
    }

    public struct LinkedService: AWSDecodableShape {
        /// If the health check or hosted zone was created by another service, an optional
        /// 			description that can be provided by the other service. When a resource is created by
        /// 			another service, you can't edit or delete it using Amazon Route 53.
        public let description: String?
        /// If the health check or hosted zone was created by another service, the service that
        /// 			created the resource. When a resource is created by another service, you can't edit or
        /// 			delete it using Amazon Route 53.
        public let servicePrincipal: String?

        public init(description: String? = nil, servicePrincipal: String? = nil) {
            self.description = description
            self.servicePrincipal = servicePrincipal
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case servicePrincipal = "ServicePrincipal"
        }
    }

    public struct ListCidrBlocksRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "collectionId", location: .uri("CollectionId")),
            AWSMemberEncoding(label: "locationName", location: .querystring("location")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxresults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nexttoken"))
        ]

        /// The UUID of the CIDR collection.
        public let collectionId: String
        /// The name of the CIDR collection location.
        public let locationName: String?
        /// Maximum number of results you want returned.
        public let maxResults: Int?
        /// An opaque pagination token to indicate where the service is to begin enumerating
        /// 			results.
        public let nextToken: String?

        public init(collectionId: String, locationName: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.collectionId = collectionId
            self.locationName = locationName
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.collectionId, name: "collectionId", parent: name, pattern: "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$")
            try self.validate(self.locationName, name: "locationName", parent: name, max: 16)
            try self.validate(self.locationName, name: "locationName", parent: name, min: 1)
            try self.validate(self.locationName, name: "locationName", parent: name, pattern: "^[0-9A-Za-z_\\-]+$")
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListCidrBlocksResponse: AWSDecodableShape {
        /// A complex type that contains information about the CIDR blocks.
        @OptionalCustomCoding<StandardArrayCoder>
        public var cidrBlocks: [CidrBlockSummary]?
        /// An opaque pagination token to indicate where the service is to begin enumerating
        /// 			results.
        /// 		       If no value is provided, the listing of results starts from the beginning.
        public let nextToken: String?

        public init(cidrBlocks: [CidrBlockSummary]? = nil, nextToken: String? = nil) {
            self.cidrBlocks = cidrBlocks
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case cidrBlocks = "CidrBlocks"
            case nextToken = "NextToken"
        }
    }

    public struct ListCidrCollectionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxresults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nexttoken"))
        ]

        /// The maximum number of CIDR collections to return in the response.
        public let maxResults: Int?
        /// An opaque pagination token to indicate where the service is to begin enumerating
        /// 			results.
        /// 		       If no value is provided, the listing of results starts from the beginning.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListCidrCollectionsResponse: AWSDecodableShape {
        /// A complex type with information about the CIDR collection.
        @OptionalCustomCoding<StandardArrayCoder>
        public var cidrCollections: [CollectionSummary]?
        /// An opaque pagination token to indicate where the service is to begin enumerating
        /// 			results.
        /// 		       If no value is provided, the listing of results starts from the beginning.
        public let nextToken: String?

        public init(cidrCollections: [CollectionSummary]? = nil, nextToken: String? = nil) {
            self.cidrCollections = cidrCollections
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case cidrCollections = "CidrCollections"
            case nextToken = "NextToken"
        }
    }

    public struct ListCidrLocationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "collectionId", location: .uri("CollectionId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxresults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nexttoken"))
        ]

        /// The CIDR collection ID.
        public let collectionId: String
        /// The maximum number of CIDR collection locations to return in the response.
        public let maxResults: Int?
        /// An opaque pagination token to indicate where the service is to begin enumerating
        /// 			results.
        /// 		       If no value is provided, the listing of results starts from the beginning.
        public let nextToken: String?

        public init(collectionId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.collectionId = collectionId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.collectionId, name: "collectionId", parent: name, pattern: "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$")
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListCidrLocationsResponse: AWSDecodableShape {
        /// A complex type that contains information about the list of CIDR locations.
        @OptionalCustomCoding<StandardArrayCoder>
        public var cidrLocations: [LocationSummary]?
        /// An opaque pagination token to indicate where the service is to begin enumerating
        /// 			results.
        /// 		       If no value is provided, the listing of results starts from the beginning.
        public let nextToken: String?

        public init(cidrLocations: [LocationSummary]? = nil, nextToken: String? = nil) {
            self.cidrLocations = cidrLocations
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case cidrLocations = "CidrLocations"
            case nextToken = "NextToken"
        }
    }

    public struct ListGeoLocationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "startContinentCode", location: .querystring("startcontinentcode")),
            AWSMemberEncoding(label: "startCountryCode", location: .querystring("startcountrycode")),
            AWSMemberEncoding(label: "startSubdivisionCode", location: .querystring("startsubdivisioncode"))
        ]

        /// (Optional) The maximum number of geolocations to be included in the response body for
        /// 			this request. If more than maxitems geolocations remain to be listed, then
        /// 			the value of the IsTruncated element in the response is
        /// 			true.
        public let maxItems: Int?
        /// The code for the continent with which you want to start listing locations that Amazon
        /// 			Route 53 supports for geolocation. If Route 53 has already returned a page or more of
        /// 			results, if IsTruncated is true, and if NextContinentCode from
        /// 			the previous response has a value, enter that value in startcontinentcode
        /// 			to return the next page of results.
        /// 		       Include startcontinentcode only if you want to list continents. Don't
        /// 			include startcontinentcode when you're listing countries or countries with
        /// 			their subdivisions.
        public let startContinentCode: String?
        /// The code for the country with which you want to start listing locations that Amazon
        /// 			Route 53 supports for geolocation. If Route 53 has already returned a page or more of
        /// 			results, if IsTruncated is true, and if
        /// 				NextCountryCode from the previous response has a value, enter that
        /// 			value in startcountrycode to return the next page of results.
        public let startCountryCode: String?
        /// The code for the state of the United States with which you want to start listing
        /// 			locations that Amazon Route 53 supports for geolocation. If Route 53 has already
        /// 			returned a page or more of results, if IsTruncated is true,
        /// 			and if NextSubdivisionCode from the previous response has a value, enter
        /// 			that value in startsubdivisioncode to return the next page of
        /// 			results.
        /// 		       To list subdivisions (U.S. states), you must include both
        /// 				startcountrycode and startsubdivisioncode.
        public let startSubdivisionCode: String?

        public init(maxItems: Int? = nil, startContinentCode: String? = nil, startCountryCode: String? = nil, startSubdivisionCode: String? = nil) {
            self.maxItems = maxItems
            self.startContinentCode = startContinentCode
            self.startCountryCode = startCountryCode
            self.startSubdivisionCode = startSubdivisionCode
        }

        public func validate(name: String) throws {
            try self.validate(self.startContinentCode, name: "startContinentCode", parent: name, max: 2)
            try self.validate(self.startContinentCode, name: "startContinentCode", parent: name, min: 2)
            try self.validate(self.startCountryCode, name: "startCountryCode", parent: name, max: 2)
            try self.validate(self.startCountryCode, name: "startCountryCode", parent: name, min: 1)
            try self.validate(self.startSubdivisionCode, name: "startSubdivisionCode", parent: name, max: 3)
            try self.validate(self.startSubdivisionCode, name: "startSubdivisionCode", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListGeoLocationsResponse: AWSDecodableShape {
        public struct _GeoLocationDetailsListEncoding: ArrayCoderProperties { public static let member = "GeoLocationDetails" }

        /// A complex type that contains one GeoLocationDetails element for each
        /// 			location that Amazon Route 53 supports for geolocation.
        @CustomCoding<ArrayCoder<_GeoLocationDetailsListEncoding, GeoLocationDetails>>
        public var geoLocationDetailsList: [GeoLocationDetails]
        /// A value that indicates whether more locations remain to be listed after the last
        /// 			location in this response. If so, the value of IsTruncated is
        /// 				true. To get more values, submit another request and include the values
        /// 			of NextContinentCode, NextCountryCode, and
        /// 				NextSubdivisionCode in the startcontinentcode,
        /// 				startcountrycode, and startsubdivisioncode, as
        /// 			applicable.
        public let isTruncated: Bool
        /// The value that you specified for MaxItems in the request.
        public let maxItems: Int
        /// If IsTruncated is true, you can make a follow-up request to
        /// 			display more locations. Enter the value of NextContinentCode in the
        /// 				startcontinentcode parameter in another ListGeoLocations
        /// 			request.
        public let nextContinentCode: String?
        /// If IsTruncated is true, you can make a follow-up request to
        /// 			display more locations. Enter the value of NextCountryCode in the
        /// 				startcountrycode parameter in another ListGeoLocations
        /// 			request.
        public let nextCountryCode: String?
        /// If IsTruncated is true, you can make a follow-up request to
        /// 			display more locations. Enter the value of NextSubdivisionCode in the
        /// 				startsubdivisioncode parameter in another ListGeoLocations
        /// 			request.
        public let nextSubdivisionCode: String?

        public init(geoLocationDetailsList: [GeoLocationDetails], isTruncated: Bool, maxItems: Int, nextContinentCode: String? = nil, nextCountryCode: String? = nil, nextSubdivisionCode: String? = nil) {
            self.geoLocationDetailsList = geoLocationDetailsList
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.nextContinentCode = nextContinentCode
            self.nextCountryCode = nextCountryCode
            self.nextSubdivisionCode = nextSubdivisionCode
        }

        private enum CodingKeys: String, CodingKey {
            case geoLocationDetailsList = "GeoLocationDetailsList"
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case nextContinentCode = "NextContinentCode"
            case nextCountryCode = "NextCountryCode"
            case nextSubdivisionCode = "NextSubdivisionCode"
        }
    }

    public struct ListHealthChecksRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "marker", location: .querystring("marker")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems"))
        ]

        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more health checks. To get another group, submit another
        /// 				ListHealthChecks request.
        /// 		       For the value of marker, specify the value of NextMarker
        /// 			from the previous response, which is the ID of the first health check that Amazon Route
        /// 			53 will return if you submit another request.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more health checks to get.
        public let marker: String?
        /// The maximum number of health checks that you want ListHealthChecks to
        /// 			return in response to the current request. Amazon Route 53 returns a maximum of 100
        /// 			items. If you set MaxItems to a value greater than 100, Route 53 returns
        /// 			only the first 100 health checks.
        public let maxItems: Int?

        public init(marker: String? = nil, maxItems: Int? = nil) {
            self.marker = marker
            self.maxItems = maxItems
        }

        public func validate(name: String) throws {
            try self.validate(self.marker, name: "marker", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListHealthChecksResponse: AWSDecodableShape {
        public struct _HealthChecksEncoding: ArrayCoderProperties { public static let member = "HealthCheck" }

        /// A complex type that contains one HealthCheck element for each health
        /// 			check that is associated with the current Amazon Web Services account.
        @CustomCoding<ArrayCoder<_HealthChecksEncoding, HealthCheck>>
        public var healthChecks: [HealthCheck]
        /// A flag that indicates whether there are more health checks to be listed. If the
        /// 			response was truncated, you can get the next group of health checks by submitting
        /// 			another ListHealthChecks request and specifying the value of
        /// 				NextMarker in the marker parameter.
        public let isTruncated: Bool
        /// For the second and subsequent calls to ListHealthChecks,
        /// 				Marker is the value that you specified for the marker
        /// 			parameter in the previous request.
        public let marker: String?
        /// The value that you specified for the maxitems parameter in the call to
        /// 				ListHealthChecks that produced the current response.
        public let maxItems: Int
        /// If IsTruncated is true, the value of NextMarker
        /// 			identifies the first health check that Amazon Route 53 returns if you submit another
        /// 				ListHealthChecks request and specify the value of
        /// 				NextMarker in the marker parameter.
        public let nextMarker: String?

        public init(healthChecks: [HealthCheck], isTruncated: Bool, marker: String? = nil, maxItems: Int, nextMarker: String? = nil) {
            self.healthChecks = healthChecks
            self.isTruncated = isTruncated
            self.marker = marker
            self.maxItems = maxItems
            self.nextMarker = nextMarker
        }

        private enum CodingKeys: String, CodingKey {
            case healthChecks = "HealthChecks"
            case isTruncated = "IsTruncated"
            case marker = "Marker"
            case maxItems = "MaxItems"
            case nextMarker = "NextMarker"
        }
    }

    public struct ListHostedZonesByNameRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "dnsName", location: .querystring("dnsname")),
            AWSMemberEncoding(label: "hostedZoneId", location: .querystring("hostedzoneid")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems"))
        ]

        /// (Optional) For your first request to ListHostedZonesByName, include the
        /// 				dnsname parameter only if you want to specify the name of the first
        /// 			hosted zone in the response. If you don't include the dnsname parameter,
        /// 			Amazon Route 53 returns all of the hosted zones that were created by the current Amazon Web Services account, in ASCII order. For subsequent requests, include both
        /// 				dnsname and hostedzoneid parameters. For
        /// 				dnsname, specify the value of NextDNSName from the
        /// 			previous response.
        public let dnsName: String?
        /// (Optional) For your first request to ListHostedZonesByName, do not
        /// 			include the hostedzoneid parameter.
        /// 		       If you have more hosted zones than the value of maxitems,
        /// 				ListHostedZonesByName returns only the first maxitems
        /// 			hosted zones. To get the next group of maxitems hosted zones, submit
        /// 			another request to ListHostedZonesByName and include both
        /// 				dnsname and hostedzoneid parameters. For the value of
        /// 				hostedzoneid, specify the value of the NextHostedZoneId
        /// 			element from the previous response.
        public let hostedZoneId: String?
        /// The maximum number of hosted zones to be included in the response body for this
        /// 			request. If you have more than maxitems hosted zones, then the value of the
        /// 				IsTruncated element in the response is true, and the values of
        /// 				NextDNSName and NextHostedZoneId specify the first hosted
        /// 			zone in the next group of maxitems hosted zones.
        public let maxItems: Int?

        public init(dnsName: String? = nil, hostedZoneId: String? = nil, maxItems: Int? = nil) {
            self.dnsName = dnsName
            self.hostedZoneId = hostedZoneId
            self.maxItems = maxItems
        }

        public func validate(name: String) throws {
            try self.validate(self.dnsName, name: "dnsName", parent: name, max: 1024)
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListHostedZonesByNameResponse: AWSDecodableShape {
        public struct _HostedZonesEncoding: ArrayCoderProperties { public static let member = "HostedZone" }

        /// For the second and subsequent calls to ListHostedZonesByName,
        /// 				DNSName is the value that you specified for the dnsname
        /// 			parameter in the request that produced the current response.
        public let dnsName: String?
        /// The ID that Amazon Route 53 assigned to the hosted zone when you created it.
        public let hostedZoneId: String?
        /// A complex type that contains general information about the hosted zone.
        @CustomCoding<ArrayCoder<_HostedZonesEncoding, HostedZone>>
        public var hostedZones: [HostedZone]
        /// A flag that indicates whether there are more hosted zones to be listed. If the
        /// 			response was truncated, you can get the next group of maxitems hosted zones
        /// 			by calling ListHostedZonesByName again and specifying the values of
        /// 				NextDNSName and NextHostedZoneId elements in the
        /// 				dnsname and hostedzoneid parameters.
        public let isTruncated: Bool
        /// The value that you specified for the maxitems parameter in the call to
        /// 				ListHostedZonesByName that produced the current response.
        public let maxItems: Int
        /// If IsTruncated is true, the value of NextDNSName is the name
        /// 			of the first hosted zone in the next group of maxitems hosted zones. Call
        /// 				ListHostedZonesByName again and specify the value of
        /// 				NextDNSName and NextHostedZoneId in the
        /// 				dnsname and hostedzoneid parameters, respectively.
        /// 		       This element is present only if IsTruncated is true.
        public let nextDNSName: String?
        /// If IsTruncated is true, the value of
        /// 				NextHostedZoneId identifies the first hosted zone in the next group of
        /// 				maxitems hosted zones. Call ListHostedZonesByName again
        /// 			and specify the value of NextDNSName and NextHostedZoneId in
        /// 			the dnsname and hostedzoneid parameters, respectively.
        /// 		       This element is present only if IsTruncated is true.
        public let nextHostedZoneId: String?

        public init(dnsName: String? = nil, hostedZoneId: String? = nil, hostedZones: [HostedZone], isTruncated: Bool, maxItems: Int, nextDNSName: String? = nil, nextHostedZoneId: String? = nil) {
            self.dnsName = dnsName
            self.hostedZoneId = hostedZoneId
            self.hostedZones = hostedZones
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.nextDNSName = nextDNSName
            self.nextHostedZoneId = nextHostedZoneId
        }

        private enum CodingKeys: String, CodingKey {
            case dnsName = "DNSName"
            case hostedZoneId = "HostedZoneId"
            case hostedZones = "HostedZones"
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case nextDNSName = "NextDNSName"
            case nextHostedZoneId = "NextHostedZoneId"
        }
    }

    public struct ListHostedZonesByVPCRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nexttoken")),
            AWSMemberEncoding(label: "vpcId", location: .querystring("vpcid")),
            AWSMemberEncoding(label: "vpcRegion", location: .querystring("vpcregion"))
        ]

        /// (Optional) The maximum number of hosted zones that you want Amazon Route 53 to return.
        /// 			If the specified VPC is associated with more than MaxItems hosted zones,
        /// 			the response includes a NextToken element. NextToken contains
        /// 			an encrypted token that identifies the first hosted zone that Route 53 will return if
        /// 			you submit another request.
        public let maxItems: Int?
        /// If the previous response included a NextToken element, the specified VPC
        /// 			is associated with more hosted zones. To get more hosted zones, submit another
        /// 				ListHostedZonesByVPC request.
        /// 		       For the value of NextToken, specify the value of NextToken
        /// 			from the previous response.
        /// 		       If the previous response didn't include a NextToken element, there are no
        /// 			more hosted zones to get.
        public let nextToken: String?
        /// The ID of the Amazon VPC that you want to list hosted zones for.
        public let vpcId: String
        /// For the Amazon VPC that you specified for VPCId, the Amazon Web Services
        /// 			Region that you created the VPC in.
        public let vpcRegion: VPCRegion

        public init(maxItems: Int? = nil, nextToken: String? = nil, vpcId: String, vpcRegion: VPCRegion) {
            self.maxItems = maxItems
            self.nextToken = nextToken
            self.vpcId = vpcId
            self.vpcRegion = vpcRegion
        }

        public func validate(name: String) throws {
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1024)
            try self.validate(self.vpcId, name: "vpcId", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListHostedZonesByVPCResponse: AWSDecodableShape {
        public struct _HostedZoneSummariesEncoding: ArrayCoderProperties { public static let member = "HostedZoneSummary" }

        /// A list that contains one HostedZoneSummary element for each hosted zone
        /// 			that the specified Amazon VPC is associated with. Each HostedZoneSummary
        /// 			element contains the hosted zone name and ID, and information about who owns the hosted
        /// 			zone.
        @CustomCoding<ArrayCoder<_HostedZoneSummariesEncoding, HostedZoneSummary>>
        public var hostedZoneSummaries: [HostedZoneSummary]
        /// The value that you specified for MaxItems in the most recent
        /// 				ListHostedZonesByVPC request.
        public let maxItems: Int
        /// The value that you will use for NextToken in the next
        /// 				ListHostedZonesByVPC request.
        public let nextToken: String?

        public init(hostedZoneSummaries: [HostedZoneSummary], maxItems: Int, nextToken: String? = nil) {
            self.hostedZoneSummaries = hostedZoneSummaries
            self.maxItems = maxItems
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneSummaries = "HostedZoneSummaries"
            case maxItems = "MaxItems"
            case nextToken = "NextToken"
        }
    }

    public struct ListHostedZonesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "delegationSetId", location: .querystring("delegationsetid")),
            AWSMemberEncoding(label: "marker", location: .querystring("marker")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems"))
        ]

        /// If you're using reusable delegation sets and you want to list all of the hosted zones
        /// 			that are associated with a reusable delegation set, specify the ID of that reusable
        /// 			delegation set.
        public let delegationSetId: String?
        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more hosted zones. To get more hosted zones, submit
        /// 			another ListHostedZones request.
        /// 		       For the value of marker, specify the value of NextMarker
        /// 			from the previous response, which is the ID of the first hosted zone that Amazon Route
        /// 			53 will return if you submit another request.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more hosted zones to get.
        public let marker: String?
        /// (Optional) The maximum number of hosted zones that you want Amazon Route 53 to return.
        /// 			If you have more than maxitems hosted zones, the value of
        /// 				IsTruncated in the response is true, and the value of
        /// 				NextMarker is the hosted zone ID of the first hosted zone that Route 53
        /// 			will return if you submit another request.
        public let maxItems: Int?

        public init(delegationSetId: String? = nil, marker: String? = nil, maxItems: Int? = nil) {
            self.delegationSetId = delegationSetId
            self.marker = marker
            self.maxItems = maxItems
        }

        public func validate(name: String) throws {
            try self.validate(self.delegationSetId, name: "delegationSetId", parent: name, max: 32)
            try self.validate(self.marker, name: "marker", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListHostedZonesResponse: AWSDecodableShape {
        public struct _HostedZonesEncoding: ArrayCoderProperties { public static let member = "HostedZone" }

        /// A complex type that contains general information about the hosted zone.
        @CustomCoding<ArrayCoder<_HostedZonesEncoding, HostedZone>>
        public var hostedZones: [HostedZone]
        /// A flag indicating whether there are more hosted zones to be listed. If the response
        /// 			was truncated, you can get more hosted zones by submitting another
        /// 				ListHostedZones request and specifying the value of
        /// 				NextMarker in the marker parameter.
        public let isTruncated: Bool
        /// For the second and subsequent calls to ListHostedZones,
        /// 				Marker is the value that you specified for the marker
        /// 			parameter in the request that produced the current response.
        public let marker: String?
        /// The value that you specified for the maxitems parameter in the call to
        /// 				ListHostedZones that produced the current response.
        public let maxItems: Int
        /// If IsTruncated is true, the value of NextMarker
        /// 			identifies the first hosted zone in the next group of hosted zones. Submit another
        /// 				ListHostedZones request, and specify the value of
        /// 				NextMarker from the response in the marker
        /// 			parameter.
        /// 		       This element is present only if IsTruncated is true.
        public let nextMarker: String?

        public init(hostedZones: [HostedZone], isTruncated: Bool, marker: String? = nil, maxItems: Int, nextMarker: String? = nil) {
            self.hostedZones = hostedZones
            self.isTruncated = isTruncated
            self.marker = marker
            self.maxItems = maxItems
            self.nextMarker = nextMarker
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZones = "HostedZones"
            case isTruncated = "IsTruncated"
            case marker = "Marker"
            case maxItems = "MaxItems"
            case nextMarker = "NextMarker"
        }
    }

    public struct ListQueryLoggingConfigsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .querystring("hostedzoneid")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxresults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nexttoken"))
        ]

        /// (Optional) If you want to list the query logging configuration that is associated with
        /// 			a hosted zone, specify the ID in HostedZoneId.
        /// 		       If you don't specify a hosted zone ID, ListQueryLoggingConfigs returns
        /// 			all of the configurations that are associated with the current Amazon Web Services account.
        public let hostedZoneId: String?
        /// (Optional) The maximum number of query logging configurations that you want Amazon
        /// 			Route 53 to return in response to the current request. If the current Amazon Web Services account has more than MaxResults configurations, use the
        /// 			value of NextToken in the response to get the next page of results.
        /// 		       If you don't specify a value for MaxResults, Route 53 returns up to 100
        /// 			configurations.
        public let maxResults: Int?
        /// (Optional) If the current Amazon Web Services account has more than
        /// 				MaxResults query logging configurations, use NextToken to
        /// 			get the second and subsequent pages of results.
        /// 		       For the first ListQueryLoggingConfigs request, omit this value.
        /// 		       For the second and subsequent requests, get the value of NextToken from
        /// 			the previous response and specify that value for NextToken in the
        /// 			request.
        public let nextToken: String?

        public init(hostedZoneId: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.hostedZoneId = hostedZoneId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListQueryLoggingConfigsResponse: AWSDecodableShape {
        public struct _QueryLoggingConfigsEncoding: ArrayCoderProperties { public static let member = "QueryLoggingConfig" }

        /// If a response includes the last of the query logging configurations that are
        /// 			associated with the current Amazon Web Services account, NextToken doesn't
        /// 			appear in the response.
        /// 		       If a response doesn't include the last of the configurations, you can get more
        /// 			configurations by submitting another ListQueryLoggingConfigs request. Get the value of NextToken
        /// 			that Amazon Route 53 returned in the previous response and include it in
        /// 				NextToken in the next request.
        public let nextToken: String?
        /// An array that contains one QueryLoggingConfig element for each configuration for DNS query logging
        /// 			that is associated with the current Amazon Web Services account.
        @CustomCoding<ArrayCoder<_QueryLoggingConfigsEncoding, QueryLoggingConfig>>
        public var queryLoggingConfigs: [QueryLoggingConfig]

        public init(nextToken: String? = nil, queryLoggingConfigs: [QueryLoggingConfig]) {
            self.nextToken = nextToken
            self.queryLoggingConfigs = queryLoggingConfigs
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case queryLoggingConfigs = "QueryLoggingConfigs"
        }
    }

    public struct ListResourceRecordSetsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "startRecordIdentifier", location: .querystring("identifier")),
            AWSMemberEncoding(label: "startRecordName", location: .querystring("name")),
            AWSMemberEncoding(label: "startRecordType", location: .querystring("type"))
        ]

        /// The ID of the hosted zone that contains the resource record sets that you want to
        /// 			list.
        public let hostedZoneId: String
        /// (Optional) The maximum number of resource records sets to include in the response body
        /// 			for this request. If the response includes more than maxitems resource
        /// 			record sets, the value of the IsTruncated element in the response is
        /// 				true, and the values of the NextRecordName and
        /// 				NextRecordType elements in the response identify the first resource
        /// 			record set in the next group of maxitems resource record sets.
        public let maxItems: Int?
        ///  Resource record sets that have a routing policy other than
        /// 				simple: If results were truncated for a given DNS name and type, specify
        /// 			the value of NextRecordIdentifier from the previous response to get the
        /// 			next resource record set that has the current DNS name and type.
        public let startRecordIdentifier: String?
        /// The first name in the lexicographic ordering of resource record sets that you want to
        /// 			list. If the specified record name doesn't exist, the results begin with the first
        /// 			resource record set that has a name greater than the value of name.
        public let startRecordName: String?
        /// The type of resource record set to begin the record listing from.
        /// 		       Valid values for basic resource record sets: A | AAAA |
        /// 				CAA | CNAME | MX | NAPTR |
        /// 				NS | PTR | SOA | SPF |
        /// 				SRV | TXT
        /// 		       Values for weighted, latency, geolocation, and failover resource record sets:
        /// 				A | AAAA | CAA | CNAME |
        /// 				MX | NAPTR | PTR | SPF |
        /// 				SRV | TXT
        /// 		       Values for alias resource record sets:
        ///
        /// 				            API Gateway custom regional API or edge-optimized
        /// 						API: A
        ///
        /// 				            CloudFront distribution: A or AAAA
        ///
        /// 				            Elastic Beanstalk environment that has a regionalized
        /// 						subdomain: A
        ///
        /// 				            Elastic Load Balancing load balancer: A |
        /// 					AAAA
        ///
        /// 				            S3 bucket: A
        ///
        /// 				            VPC interface VPC endpoint: A
        ///
        /// 				            Another resource record set in this hosted
        /// 						zone: The type of the resource record set that the alias
        /// 					references.
        ///
        /// 		       Constraint: Specifying type without specifying name returns
        /// 			an InvalidInput error.
        public let startRecordType: RRType?

        public init(hostedZoneId: String, maxItems: Int? = nil, startRecordIdentifier: String? = nil, startRecordName: String? = nil, startRecordType: RRType? = nil) {
            self.hostedZoneId = hostedZoneId
            self.maxItems = maxItems
            self.startRecordIdentifier = startRecordIdentifier
            self.startRecordName = startRecordName
            self.startRecordType = startRecordType
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.startRecordIdentifier, name: "startRecordIdentifier", parent: name, max: 128)
            try self.validate(self.startRecordIdentifier, name: "startRecordIdentifier", parent: name, min: 1)
            try self.validate(self.startRecordName, name: "startRecordName", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListResourceRecordSetsResponse: AWSDecodableShape {
        public struct _ResourceRecordSetsEncoding: ArrayCoderProperties { public static let member = "ResourceRecordSet" }

        /// A flag that indicates whether more resource record sets remain to be listed. If your
        /// 			results were truncated, you can make a follow-up pagination request by using the
        /// 				NextRecordName element.
        public let isTruncated: Bool
        /// The maximum number of records you requested.
        public let maxItems: Int
        ///  Resource record sets that have a routing policy other than
        /// 				simple: If results were truncated for a given DNS name and type, the
        /// 			value of SetIdentifier for the next resource record set that has the
        /// 			current DNS name and type.
        /// 		       For information about routing policies, see Choosing a Routing
        /// 				Policy in the Amazon Route 53 Developer Guide.
        public let nextRecordIdentifier: String?
        /// If the results were truncated, the name of the next record in the list.
        /// 		       This element is present only if IsTruncated is true.
        public let nextRecordName: String?
        /// If the results were truncated, the type of the next record in the list.
        /// 		       This element is present only if IsTruncated is true.
        public let nextRecordType: RRType?
        /// Information about multiple resource record sets.
        @CustomCoding<ArrayCoder<_ResourceRecordSetsEncoding, ResourceRecordSet>>
        public var resourceRecordSets: [ResourceRecordSet]

        public init(isTruncated: Bool, maxItems: Int, nextRecordIdentifier: String? = nil, nextRecordName: String? = nil, nextRecordType: RRType? = nil, resourceRecordSets: [ResourceRecordSet]) {
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.nextRecordIdentifier = nextRecordIdentifier
            self.nextRecordName = nextRecordName
            self.nextRecordType = nextRecordType
            self.resourceRecordSets = resourceRecordSets
        }

        private enum CodingKeys: String, CodingKey {
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case nextRecordIdentifier = "NextRecordIdentifier"
            case nextRecordName = "NextRecordName"
            case nextRecordType = "NextRecordType"
            case resourceRecordSets = "ResourceRecordSets"
        }
    }

    public struct ListReusableDelegationSetsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "marker", location: .querystring("marker")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems"))
        ]

        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more reusable delegation sets. To get another group,
        /// 			submit another ListReusableDelegationSets request.
        /// 		       For the value of marker, specify the value of NextMarker
        /// 			from the previous response, which is the ID of the first reusable delegation set that
        /// 			Amazon Route 53 will return if you submit another request.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more reusable delegation sets to get.
        public let marker: String?
        /// The number of reusable delegation sets that you want Amazon Route 53 to return in the
        /// 			response to this request. If you specify a value greater than 100, Route 53 returns only
        /// 			the first 100 reusable delegation sets.
        public let maxItems: Int?

        public init(marker: String? = nil, maxItems: Int? = nil) {
            self.marker = marker
            self.maxItems = maxItems
        }

        public func validate(name: String) throws {
            try self.validate(self.marker, name: "marker", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListReusableDelegationSetsResponse: AWSDecodableShape {
        public struct _DelegationSetsEncoding: ArrayCoderProperties { public static let member = "DelegationSet" }

        /// A complex type that contains one DelegationSet element for each reusable
        /// 			delegation set that was created by the current Amazon Web Services account.
        @CustomCoding<ArrayCoder<_DelegationSetsEncoding, DelegationSet>>
        public var delegationSets: [DelegationSet]
        /// A flag that indicates whether there are more reusable delegation sets to be
        /// 			listed.
        public let isTruncated: Bool
        /// For the second and subsequent calls to ListReusableDelegationSets,
        /// 				Marker is the value that you specified for the marker
        /// 			parameter in the request that produced the current response.
        public let marker: String?
        /// The value that you specified for the maxitems parameter in the call to
        /// 				ListReusableDelegationSets that produced the current response.
        public let maxItems: Int
        /// If IsTruncated is true, the value of NextMarker
        /// 			identifies the next reusable delegation set that Amazon Route 53 will return if you
        /// 			submit another ListReusableDelegationSets request and specify the value of
        /// 				NextMarker in the marker parameter.
        public let nextMarker: String?

        public init(delegationSets: [DelegationSet], isTruncated: Bool, marker: String? = nil, maxItems: Int, nextMarker: String? = nil) {
            self.delegationSets = delegationSets
            self.isTruncated = isTruncated
            self.marker = marker
            self.maxItems = maxItems
            self.nextMarker = nextMarker
        }

        private enum CodingKeys: String, CodingKey {
            case delegationSets = "DelegationSets"
            case isTruncated = "IsTruncated"
            case marker = "Marker"
            case maxItems = "MaxItems"
            case nextMarker = "NextMarker"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceId", location: .uri("ResourceId")),
            AWSMemberEncoding(label: "resourceType", location: .uri("ResourceType"))
        ]

        /// The ID of the resource for which you want to retrieve tags.
        public let resourceId: String
        /// The type of the resource.
        ///
        /// 				           The resource type for health checks is healthcheck.
        ///
        /// 				           The resource type for hosted zones is hostedzone.
        ///
        public let resourceType: TagResourceType

        public init(resourceId: String, resourceType: TagResourceType) {
            self.resourceId = resourceId
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 64)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        /// A ResourceTagSet containing tags associated with the specified
        /// 			resource.
        public let resourceTagSet: ResourceTagSet

        public init(resourceTagSet: ResourceTagSet) {
            self.resourceTagSet = resourceTagSet
        }

        private enum CodingKeys: String, CodingKey {
            case resourceTagSet = "ResourceTagSet"
        }
    }

    public struct ListTagsForResourcesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceType", location: .uri("ResourceType"))
        ]
        public struct _ResourceIdsEncoding: ArrayCoderProperties { public static let member = "ResourceId" }

        /// A complex type that contains the ResourceId element for each resource for which you
        /// 			want to get a list of tags.
        @CustomCoding<ArrayCoder<_ResourceIdsEncoding, String>>
        public var resourceIds: [String]
        /// The type of the resources.
        ///
        /// 				           The resource type for health checks is healthcheck.
        ///
        /// 				           The resource type for hosted zones is hostedzone.
        ///
        public let resourceType: TagResourceType

        public init(resourceIds: [String], resourceType: TagResourceType) {
            self.resourceIds = resourceIds
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.resourceIds.forEach {
                try validate($0, name: "resourceIds[]", parent: name, max: 64)
            }
            try self.validate(self.resourceIds, name: "resourceIds", parent: name, max: 10)
            try self.validate(self.resourceIds, name: "resourceIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case resourceIds = "ResourceIds"
        }
    }

    public struct ListTagsForResourcesResponse: AWSDecodableShape {
        public struct _ResourceTagSetsEncoding: ArrayCoderProperties { public static let member = "ResourceTagSet" }

        /// A list of ResourceTagSets containing tags associated with the specified
        /// 			resources.
        @CustomCoding<ArrayCoder<_ResourceTagSetsEncoding, ResourceTagSet>>
        public var resourceTagSets: [ResourceTagSet]

        public init(resourceTagSets: [ResourceTagSet]) {
            self.resourceTagSets = resourceTagSets
        }

        private enum CodingKeys: String, CodingKey {
            case resourceTagSets = "ResourceTagSets"
        }
    }

    public struct ListTrafficPoliciesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "trafficPolicyIdMarker", location: .querystring("trafficpolicyid"))
        ]

        /// (Optional) The maximum number of traffic policies that you want Amazon Route 53 to
        /// 			return in response to this request. If you have more than MaxItems traffic
        /// 			policies, the value of IsTruncated in the response is true,
        /// 			and the value of TrafficPolicyIdMarker is the ID of the first traffic
        /// 			policy that Route 53 will return if you submit another request.
        public let maxItems: Int?
        /// (Conditional) For your first request to ListTrafficPolicies, don't
        /// 			include the TrafficPolicyIdMarker parameter.
        /// 		       If you have more traffic policies than the value of MaxItems,
        /// 				ListTrafficPolicies returns only the first MaxItems
        /// 			traffic policies. To get the next group of policies, submit another request to
        /// 				ListTrafficPolicies. For the value of
        /// 				TrafficPolicyIdMarker, specify the value of
        /// 				TrafficPolicyIdMarker that was returned in the previous
        /// 			response.
        public let trafficPolicyIdMarker: String?

        public init(maxItems: Int? = nil, trafficPolicyIdMarker: String? = nil) {
            self.maxItems = maxItems
            self.trafficPolicyIdMarker = trafficPolicyIdMarker
        }

        public func validate(name: String) throws {
            try self.validate(self.trafficPolicyIdMarker, name: "trafficPolicyIdMarker", parent: name, max: 36)
            try self.validate(self.trafficPolicyIdMarker, name: "trafficPolicyIdMarker", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTrafficPoliciesResponse: AWSDecodableShape {
        public struct _TrafficPolicySummariesEncoding: ArrayCoderProperties { public static let member = "TrafficPolicySummary" }

        /// A flag that indicates whether there are more traffic policies to be listed. If the
        /// 			response was truncated, you can get the next group of traffic policies by submitting
        /// 			another ListTrafficPolicies request and specifying the value of
        /// 				TrafficPolicyIdMarker in the TrafficPolicyIdMarker request
        /// 			parameter.
        public let isTruncated: Bool
        /// The value that you specified for the MaxItems parameter in the
        /// 				ListTrafficPolicies request that produced the current response.
        public let maxItems: Int
        /// If the value of IsTruncated is true,
        /// 				TrafficPolicyIdMarker is the ID of the first traffic policy in the next
        /// 			group of MaxItems traffic policies.
        public let trafficPolicyIdMarker: String
        /// A list that contains one TrafficPolicySummary element for each traffic
        /// 			policy that was created by the current Amazon Web Services account.
        @CustomCoding<ArrayCoder<_TrafficPolicySummariesEncoding, TrafficPolicySummary>>
        public var trafficPolicySummaries: [TrafficPolicySummary]

        public init(isTruncated: Bool, maxItems: Int, trafficPolicyIdMarker: String, trafficPolicySummaries: [TrafficPolicySummary]) {
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.trafficPolicyIdMarker = trafficPolicyIdMarker
            self.trafficPolicySummaries = trafficPolicySummaries
        }

        private enum CodingKeys: String, CodingKey {
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case trafficPolicyIdMarker = "TrafficPolicyIdMarker"
            case trafficPolicySummaries = "TrafficPolicySummaries"
        }
    }

    public struct ListTrafficPolicyInstancesByHostedZoneRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .querystring("id")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "trafficPolicyInstanceNameMarker", location: .querystring("trafficpolicyinstancename")),
            AWSMemberEncoding(label: "trafficPolicyInstanceTypeMarker", location: .querystring("trafficpolicyinstancetype"))
        ]

        /// The ID of the hosted zone that you want to list traffic policy instances for.
        public let hostedZoneId: String
        /// The maximum number of traffic policy instances to be included in the response body for
        /// 			this request. If you have more than MaxItems traffic policy instances, the
        /// 			value of the IsTruncated element in the response is true, and
        /// 			the values of HostedZoneIdMarker,
        /// 				TrafficPolicyInstanceNameMarker, and
        /// 				TrafficPolicyInstanceTypeMarker represent the first traffic policy
        /// 			instance that Amazon Route 53 will return if you submit another request.
        public let maxItems: Int?
        /// If the value of IsTruncated in the previous response is true, you have
        /// 			more traffic policy instances. To get more traffic policy instances, submit another
        /// 				ListTrafficPolicyInstances request. For the value of
        /// 				trafficpolicyinstancename, specify the value of
        /// 				TrafficPolicyInstanceNameMarker from the previous response, which is
        /// 			the name of the first traffic policy instance in the next group of traffic policy
        /// 			instances.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let trafficPolicyInstanceNameMarker: String?
        /// If the value of IsTruncated in the previous response is true, you have
        /// 			more traffic policy instances. To get more traffic policy instances, submit another
        /// 				ListTrafficPolicyInstances request. For the value of
        /// 				trafficpolicyinstancetype, specify the value of
        /// 				TrafficPolicyInstanceTypeMarker from the previous response, which is
        /// 			the type of the first traffic policy instance in the next group of traffic policy
        /// 			instances.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let trafficPolicyInstanceTypeMarker: RRType?

        public init(hostedZoneId: String, maxItems: Int? = nil, trafficPolicyInstanceNameMarker: String? = nil, trafficPolicyInstanceTypeMarker: RRType? = nil) {
            self.hostedZoneId = hostedZoneId
            self.maxItems = maxItems
            self.trafficPolicyInstanceNameMarker = trafficPolicyInstanceNameMarker
            self.trafficPolicyInstanceTypeMarker = trafficPolicyInstanceTypeMarker
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.trafficPolicyInstanceNameMarker, name: "trafficPolicyInstanceNameMarker", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTrafficPolicyInstancesByHostedZoneResponse: AWSDecodableShape {
        public struct _TrafficPolicyInstancesEncoding: ArrayCoderProperties { public static let member = "TrafficPolicyInstance" }

        /// A flag that indicates whether there are more traffic policy instances to be listed. If
        /// 			the response was truncated, you can get the next group of traffic policy instances by
        /// 			submitting another ListTrafficPolicyInstancesByHostedZone request and
        /// 			specifying the values of HostedZoneIdMarker,
        /// 				TrafficPolicyInstanceNameMarker, and
        /// 				TrafficPolicyInstanceTypeMarker in the corresponding request
        /// 			parameters.
        public let isTruncated: Bool
        /// The value that you specified for the MaxItems parameter in the
        /// 				ListTrafficPolicyInstancesByHostedZone request that produced the
        /// 			current response.
        public let maxItems: Int
        /// If IsTruncated is true,
        /// 				TrafficPolicyInstanceNameMarker is the name of the first traffic policy
        /// 			instance in the next group of traffic policy instances.
        public let trafficPolicyInstanceNameMarker: String?
        /// A list that contains one TrafficPolicyInstance element for each traffic
        /// 			policy instance that matches the elements in the request.
        @CustomCoding<ArrayCoder<_TrafficPolicyInstancesEncoding, TrafficPolicyInstance>>
        public var trafficPolicyInstances: [TrafficPolicyInstance]
        /// If IsTruncated is true, TrafficPolicyInstanceTypeMarker is
        /// 			the DNS type of the resource record sets that are associated with the first traffic
        /// 			policy instance in the next group of traffic policy instances.
        public let trafficPolicyInstanceTypeMarker: RRType?

        public init(isTruncated: Bool, maxItems: Int, trafficPolicyInstanceNameMarker: String? = nil, trafficPolicyInstances: [TrafficPolicyInstance], trafficPolicyInstanceTypeMarker: RRType? = nil) {
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.trafficPolicyInstanceNameMarker = trafficPolicyInstanceNameMarker
            self.trafficPolicyInstances = trafficPolicyInstances
            self.trafficPolicyInstanceTypeMarker = trafficPolicyInstanceTypeMarker
        }

        private enum CodingKeys: String, CodingKey {
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case trafficPolicyInstanceNameMarker = "TrafficPolicyInstanceNameMarker"
            case trafficPolicyInstances = "TrafficPolicyInstances"
            case trafficPolicyInstanceTypeMarker = "TrafficPolicyInstanceTypeMarker"
        }
    }

    public struct ListTrafficPolicyInstancesByPolicyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneIdMarker", location: .querystring("hostedzoneid")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "trafficPolicyId", location: .querystring("id")),
            AWSMemberEncoding(label: "trafficPolicyInstanceNameMarker", location: .querystring("trafficpolicyinstancename")),
            AWSMemberEncoding(label: "trafficPolicyInstanceTypeMarker", location: .querystring("trafficpolicyinstancetype")),
            AWSMemberEncoding(label: "trafficPolicyVersion", location: .querystring("version"))
        ]

        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more traffic policy instances. To get more traffic
        /// 			policy instances, submit another ListTrafficPolicyInstancesByPolicy
        /// 			request.
        /// 		       For the value of hostedzoneid, specify the value of
        /// 				HostedZoneIdMarker from the previous response, which is the hosted zone
        /// 			ID of the first traffic policy instance that Amazon Route 53 will return if you submit
        /// 			another request.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let hostedZoneIdMarker: String?
        /// The maximum number of traffic policy instances to be included in the response body for
        /// 			this request. If you have more than MaxItems traffic policy instances, the
        /// 			value of the IsTruncated element in the response is true, and
        /// 			the values of HostedZoneIdMarker,
        /// 				TrafficPolicyInstanceNameMarker, and
        /// 				TrafficPolicyInstanceTypeMarker represent the first traffic policy
        /// 			instance that Amazon Route 53 will return if you submit another request.
        public let maxItems: Int?
        /// The ID of the traffic policy for which you want to list traffic policy
        /// 			instances.
        public let trafficPolicyId: String
        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more traffic policy instances. To get more traffic
        /// 			policy instances, submit another ListTrafficPolicyInstancesByPolicy
        /// 			request.
        /// 		       For the value of trafficpolicyinstancename, specify the value of
        /// 				TrafficPolicyInstanceNameMarker from the previous response, which is
        /// 			the name of the first traffic policy instance that Amazon Route 53 will return if you
        /// 			submit another request.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let trafficPolicyInstanceNameMarker: String?
        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more traffic policy instances. To get more traffic
        /// 			policy instances, submit another ListTrafficPolicyInstancesByPolicy
        /// 			request.
        /// 		       For the value of trafficpolicyinstancetype, specify the value of
        /// 				TrafficPolicyInstanceTypeMarker from the previous response, which is
        /// 			the name of the first traffic policy instance that Amazon Route 53 will return if you
        /// 			submit another request.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let trafficPolicyInstanceTypeMarker: RRType?
        /// The version of the traffic policy for which you want to list traffic policy instances.
        /// 			The version must be associated with the traffic policy that is specified by
        /// 				TrafficPolicyId.
        public let trafficPolicyVersion: Int

        public init(hostedZoneIdMarker: String? = nil, maxItems: Int? = nil, trafficPolicyId: String, trafficPolicyInstanceNameMarker: String? = nil, trafficPolicyInstanceTypeMarker: RRType? = nil, trafficPolicyVersion: Int) {
            self.hostedZoneIdMarker = hostedZoneIdMarker
            self.maxItems = maxItems
            self.trafficPolicyId = trafficPolicyId
            self.trafficPolicyInstanceNameMarker = trafficPolicyInstanceNameMarker
            self.trafficPolicyInstanceTypeMarker = trafficPolicyInstanceTypeMarker
            self.trafficPolicyVersion = trafficPolicyVersion
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneIdMarker, name: "hostedZoneIdMarker", parent: name, max: 32)
            try self.validate(self.trafficPolicyId, name: "trafficPolicyId", parent: name, max: 36)
            try self.validate(self.trafficPolicyId, name: "trafficPolicyId", parent: name, min: 1)
            try self.validate(self.trafficPolicyInstanceNameMarker, name: "trafficPolicyInstanceNameMarker", parent: name, max: 1024)
            try self.validate(self.trafficPolicyVersion, name: "trafficPolicyVersion", parent: name, max: 1000)
            try self.validate(self.trafficPolicyVersion, name: "trafficPolicyVersion", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTrafficPolicyInstancesByPolicyResponse: AWSDecodableShape {
        public struct _TrafficPolicyInstancesEncoding: ArrayCoderProperties { public static let member = "TrafficPolicyInstance" }

        /// If IsTruncated is true, HostedZoneIdMarker is
        /// 			the ID of the hosted zone of the first traffic policy instance in the next group of
        /// 			traffic policy instances.
        public let hostedZoneIdMarker: String?
        /// A flag that indicates whether there are more traffic policy instances to be listed. If
        /// 			the response was truncated, you can get the next group of traffic policy instances by
        /// 			calling ListTrafficPolicyInstancesByPolicy again and specifying the values
        /// 			of the HostedZoneIdMarker, TrafficPolicyInstanceNameMarker,
        /// 			and TrafficPolicyInstanceTypeMarker elements in the corresponding request
        /// 			parameters.
        public let isTruncated: Bool
        /// The value that you specified for the MaxItems parameter in the call to
        /// 				ListTrafficPolicyInstancesByPolicy that produced the current
        /// 			response.
        public let maxItems: Int
        /// If IsTruncated is true,
        /// 				TrafficPolicyInstanceNameMarker is the name of the first traffic policy
        /// 			instance in the next group of MaxItems traffic policy instances.
        public let trafficPolicyInstanceNameMarker: String?
        /// A list that contains one TrafficPolicyInstance element for each traffic
        /// 			policy instance that matches the elements in the request.
        @CustomCoding<ArrayCoder<_TrafficPolicyInstancesEncoding, TrafficPolicyInstance>>
        public var trafficPolicyInstances: [TrafficPolicyInstance]
        /// If IsTruncated is true,
        /// 				TrafficPolicyInstanceTypeMarker is the DNS type of the resource record
        /// 			sets that are associated with the first traffic policy instance in the next group of
        /// 				MaxItems traffic policy instances.
        public let trafficPolicyInstanceTypeMarker: RRType?

        public init(hostedZoneIdMarker: String? = nil, isTruncated: Bool, maxItems: Int, trafficPolicyInstanceNameMarker: String? = nil, trafficPolicyInstances: [TrafficPolicyInstance], trafficPolicyInstanceTypeMarker: RRType? = nil) {
            self.hostedZoneIdMarker = hostedZoneIdMarker
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.trafficPolicyInstanceNameMarker = trafficPolicyInstanceNameMarker
            self.trafficPolicyInstances = trafficPolicyInstances
            self.trafficPolicyInstanceTypeMarker = trafficPolicyInstanceTypeMarker
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneIdMarker = "HostedZoneIdMarker"
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case trafficPolicyInstanceNameMarker = "TrafficPolicyInstanceNameMarker"
            case trafficPolicyInstances = "TrafficPolicyInstances"
            case trafficPolicyInstanceTypeMarker = "TrafficPolicyInstanceTypeMarker"
        }
    }

    public struct ListTrafficPolicyInstancesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneIdMarker", location: .querystring("hostedzoneid")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "trafficPolicyInstanceNameMarker", location: .querystring("trafficpolicyinstancename")),
            AWSMemberEncoding(label: "trafficPolicyInstanceTypeMarker", location: .querystring("trafficpolicyinstancetype"))
        ]

        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more traffic policy instances. To get more traffic
        /// 			policy instances, submit another ListTrafficPolicyInstances request. For
        /// 			the value of HostedZoneId, specify the value of
        /// 				HostedZoneIdMarker from the previous response, which is the hosted zone
        /// 			ID of the first traffic policy instance in the next group of traffic policy
        /// 			instances.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let hostedZoneIdMarker: String?
        /// The maximum number of traffic policy instances that you want Amazon Route 53 to return
        /// 			in response to a ListTrafficPolicyInstances request. If you have more than
        /// 				MaxItems traffic policy instances, the value of the
        /// 				IsTruncated element in the response is true, and the
        /// 			values of HostedZoneIdMarker, TrafficPolicyInstanceNameMarker,
        /// 			and TrafficPolicyInstanceTypeMarker represent the first traffic policy
        /// 			instance in the next group of MaxItems traffic policy instances.
        public let maxItems: Int?
        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more traffic policy instances. To get more traffic
        /// 			policy instances, submit another ListTrafficPolicyInstances request. For
        /// 			the value of trafficpolicyinstancename, specify the value of
        /// 				TrafficPolicyInstanceNameMarker from the previous response, which is
        /// 			the name of the first traffic policy instance in the next group of traffic policy
        /// 			instances.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let trafficPolicyInstanceNameMarker: String?
        /// If the value of IsTruncated in the previous response was
        /// 				true, you have more traffic policy instances. To get more traffic
        /// 			policy instances, submit another ListTrafficPolicyInstances request. For
        /// 			the value of trafficpolicyinstancetype, specify the value of
        /// 				TrafficPolicyInstanceTypeMarker from the previous response, which is
        /// 			the type of the first traffic policy instance in the next group of traffic policy
        /// 			instances.
        /// 		       If the value of IsTruncated in the previous response was
        /// 				false, there are no more traffic policy instances to get.
        public let trafficPolicyInstanceTypeMarker: RRType?

        public init(hostedZoneIdMarker: String? = nil, maxItems: Int? = nil, trafficPolicyInstanceNameMarker: String? = nil, trafficPolicyInstanceTypeMarker: RRType? = nil) {
            self.hostedZoneIdMarker = hostedZoneIdMarker
            self.maxItems = maxItems
            self.trafficPolicyInstanceNameMarker = trafficPolicyInstanceNameMarker
            self.trafficPolicyInstanceTypeMarker = trafficPolicyInstanceTypeMarker
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneIdMarker, name: "hostedZoneIdMarker", parent: name, max: 32)
            try self.validate(self.trafficPolicyInstanceNameMarker, name: "trafficPolicyInstanceNameMarker", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTrafficPolicyInstancesResponse: AWSDecodableShape {
        public struct _TrafficPolicyInstancesEncoding: ArrayCoderProperties { public static let member = "TrafficPolicyInstance" }

        /// If IsTruncated is true, HostedZoneIdMarker is
        /// 			the ID of the hosted zone of the first traffic policy instance that Route 53 will return
        /// 			if you submit another ListTrafficPolicyInstances request.
        public let hostedZoneIdMarker: String?
        /// A flag that indicates whether there are more traffic policy instances to be listed. If
        /// 			the response was truncated, you can get more traffic policy instances by calling
        /// 				ListTrafficPolicyInstances again and specifying the values of the
        /// 				HostedZoneIdMarker, TrafficPolicyInstanceNameMarker, and
        /// 				TrafficPolicyInstanceTypeMarker in the corresponding request
        /// 			parameters.
        public let isTruncated: Bool
        /// The value that you specified for the MaxItems parameter in the call to
        /// 				ListTrafficPolicyInstances that produced the current response.
        public let maxItems: Int
        /// If IsTruncated is true,
        /// 				TrafficPolicyInstanceNameMarker is the name of the first traffic policy
        /// 			instance that Route 53 will return if you submit another
        /// 				ListTrafficPolicyInstances request.
        public let trafficPolicyInstanceNameMarker: String?
        /// A list that contains one TrafficPolicyInstance element for each traffic
        /// 			policy instance that matches the elements in the request.
        @CustomCoding<ArrayCoder<_TrafficPolicyInstancesEncoding, TrafficPolicyInstance>>
        public var trafficPolicyInstances: [TrafficPolicyInstance]
        /// If IsTruncated is true,
        /// 				TrafficPolicyInstanceTypeMarker is the DNS type of the resource record
        /// 			sets that are associated with the first traffic policy instance that Amazon Route 53
        /// 			will return if you submit another ListTrafficPolicyInstances request.
        ///
        public let trafficPolicyInstanceTypeMarker: RRType?

        public init(hostedZoneIdMarker: String? = nil, isTruncated: Bool, maxItems: Int, trafficPolicyInstanceNameMarker: String? = nil, trafficPolicyInstances: [TrafficPolicyInstance], trafficPolicyInstanceTypeMarker: RRType? = nil) {
            self.hostedZoneIdMarker = hostedZoneIdMarker
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.trafficPolicyInstanceNameMarker = trafficPolicyInstanceNameMarker
            self.trafficPolicyInstances = trafficPolicyInstances
            self.trafficPolicyInstanceTypeMarker = trafficPolicyInstanceTypeMarker
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneIdMarker = "HostedZoneIdMarker"
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case trafficPolicyInstanceNameMarker = "TrafficPolicyInstanceNameMarker"
            case trafficPolicyInstances = "TrafficPolicyInstances"
            case trafficPolicyInstanceTypeMarker = "TrafficPolicyInstanceTypeMarker"
        }
    }

    public struct ListTrafficPolicyVersionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "maxItems", location: .querystring("maxitems")),
            AWSMemberEncoding(label: "trafficPolicyVersionMarker", location: .querystring("trafficpolicyversion"))
        ]

        /// Specify the value of Id of the traffic policy for which you want to list
        /// 			all versions.
        public let id: String
        /// The maximum number of traffic policy versions that you want Amazon Route 53 to include
        /// 			in the response body for this request. If the specified traffic policy has more than
        /// 				MaxItems versions, the value of IsTruncated in the
        /// 			response is true, and the value of the
        /// 				TrafficPolicyVersionMarker element is the ID of the first version that
        /// 			Route 53 will return if you submit another request.
        public let maxItems: Int?
        /// For your first request to ListTrafficPolicyVersions, don't include the
        /// 				TrafficPolicyVersionMarker parameter.
        /// 		       If you have more traffic policy versions than the value of MaxItems,
        /// 				ListTrafficPolicyVersions returns only the first group of
        /// 				MaxItems versions. To get more traffic policy versions, submit another
        /// 				ListTrafficPolicyVersions request. For the value of
        /// 				TrafficPolicyVersionMarker, specify the value of
        /// 				TrafficPolicyVersionMarker in the previous response.
        public let trafficPolicyVersionMarker: String?

        public init(id: String, maxItems: Int? = nil, trafficPolicyVersionMarker: String? = nil) {
            self.id = id
            self.maxItems = maxItems
            self.trafficPolicyVersionMarker = trafficPolicyVersionMarker
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
            try self.validate(self.trafficPolicyVersionMarker, name: "trafficPolicyVersionMarker", parent: name, max: 4)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTrafficPolicyVersionsResponse: AWSDecodableShape {
        public struct _TrafficPoliciesEncoding: ArrayCoderProperties { public static let member = "TrafficPolicy" }

        /// A flag that indicates whether there are more traffic policies to be listed. If the
        /// 			response was truncated, you can get the next group of traffic policies by submitting
        /// 			another ListTrafficPolicyVersions request and specifying the value of
        /// 				NextMarker in the marker parameter.
        public let isTruncated: Bool
        /// The value that you specified for the maxitems parameter in the
        /// 				ListTrafficPolicyVersions request that produced the current
        /// 			response.
        public let maxItems: Int
        /// A list that contains one TrafficPolicy element for each traffic policy
        /// 			version that is associated with the specified traffic policy.
        @CustomCoding<ArrayCoder<_TrafficPoliciesEncoding, TrafficPolicy>>
        public var trafficPolicies: [TrafficPolicy]
        /// If IsTruncated is true, the value of
        /// 				TrafficPolicyVersionMarker identifies the first traffic policy that
        /// 			Amazon Route 53 will return if you submit another request. Call
        /// 				ListTrafficPolicyVersions again and specify the value of
        /// 				TrafficPolicyVersionMarker in the
        /// 				TrafficPolicyVersionMarker request parameter.
        /// 		       This element is present only if IsTruncated is true.
        public let trafficPolicyVersionMarker: String

        public init(isTruncated: Bool, maxItems: Int, trafficPolicies: [TrafficPolicy], trafficPolicyVersionMarker: String) {
            self.isTruncated = isTruncated
            self.maxItems = maxItems
            self.trafficPolicies = trafficPolicies
            self.trafficPolicyVersionMarker = trafficPolicyVersionMarker
        }

        private enum CodingKeys: String, CodingKey {
            case isTruncated = "IsTruncated"
            case maxItems = "MaxItems"
            case trafficPolicies = "TrafficPolicies"
            case trafficPolicyVersionMarker = "TrafficPolicyVersionMarker"
        }
    }

    public struct ListVPCAssociationAuthorizationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "hostedZoneId", location: .uri("HostedZoneId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxresults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nexttoken"))
        ]

        /// The ID of the hosted zone for which you want a list of VPCs that can be associated
        /// 			with the hosted zone.
        public let hostedZoneId: String
        ///  Optional: An integer that specifies the maximum number of VPCs
        /// 			that you want Amazon Route 53 to return. If you don't specify a value for
        /// 				MaxResults, Route 53 returns up to 50 VPCs per page.
        public let maxResults: Int?
        ///  Optional: If a response includes a NextToken
        /// 			element, there are more VPCs that can be associated with the specified hosted zone. To
        /// 			get the next page of results, submit another request, and include the value of
        /// 				NextToken from the response in the nexttoken parameter in
        /// 			another ListVPCAssociationAuthorizations request.
        public let nextToken: String?

        public init(hostedZoneId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.hostedZoneId = hostedZoneId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1024)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVPCAssociationAuthorizationsResponse: AWSDecodableShape {
        public struct _VPCsEncoding: ArrayCoderProperties { public static let member = "VPC" }

        /// The ID of the hosted zone that you can associate the listed VPCs with.
        public let hostedZoneId: String
        /// When the response includes a NextToken element, there are more VPCs that
        /// 			can be associated with the specified hosted zone. To get the next page of VPCs, submit
        /// 			another ListVPCAssociationAuthorizations request, and include the value of
        /// 			the NextToken element from the response in the nexttoken
        /// 			request parameter.
        public let nextToken: String?
        /// The list of VPCs that are authorized to be associated with the specified hosted
        /// 			zone.
        @CustomCoding<ArrayCoder<_VPCsEncoding, VPC>>
        public var vpCs: [VPC]

        public init(hostedZoneId: String, nextToken: String? = nil, vpCs: [VPC]) {
            self.hostedZoneId = hostedZoneId
            self.nextToken = nextToken
            self.vpCs = vpCs
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneId = "HostedZoneId"
            case nextToken = "NextToken"
            case vpCs = "VPCs"
        }
    }

    public struct LocationSummary: AWSDecodableShape {
        /// A string that specifies a location name.
        public let locationName: String?

        public init(locationName: String? = nil) {
            self.locationName = locationName
        }

        private enum CodingKeys: String, CodingKey {
            case locationName = "LocationName"
        }
    }

    public struct QueryLoggingConfig: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the CloudWatch Logs log group that Amazon Route 53
        /// 			is publishing logs to.
        public let cloudWatchLogsLogGroupArn: String
        /// The ID of the hosted zone that CloudWatch Logs is logging queries for.
        public let hostedZoneId: String
        /// The ID for a configuration for DNS query logging.
        public let id: String

        public init(cloudWatchLogsLogGroupArn: String, hostedZoneId: String, id: String) {
            self.cloudWatchLogsLogGroupArn = cloudWatchLogsLogGroupArn
            self.hostedZoneId = hostedZoneId
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case cloudWatchLogsLogGroupArn = "CloudWatchLogsLogGroupArn"
            case hostedZoneId = "HostedZoneId"
            case id = "Id"
        }
    }

    public struct ResourceRecord: AWSEncodableShape & AWSDecodableShape {
        /// The current or new DNS record value, not to exceed 4,000 characters. In the case of a
        /// 				DELETE action, if the current value does not match the actual value, an
        /// 			error is returned. For descriptions about how to format Value for different
        /// 			record types, see Supported DNS Resource
        /// 				Record Types in the Amazon Route 53 Developer
        /// 			Guide.
        /// 		       You can specify more than one value for all record types except CNAME and
        /// 				SOA.
        ///
        /// 			         If you're creating an alias resource record set, omit Value.
        ///
        public let value: String

        public init(value: String) {
            self.value = value
        }

        public func validate(name: String) throws {
            try self.validate(self.value, name: "value", parent: name, max: 4000)
        }

        private enum CodingKeys: String, CodingKey {
            case value = "Value"
        }
    }

    public struct ResourceRecordSet: AWSEncodableShape & AWSDecodableShape {
        public struct _ResourceRecordsEncoding: ArrayCoderProperties { public static let member = "ResourceRecord" }

        ///  Alias resource record sets only: Information about the Amazon Web Services resource, such as a CloudFront distribution or an Amazon S3 bucket, that
        /// 			you want to route traffic to.
        /// 		       If you're creating resource records sets for a private hosted zone, note the
        /// 			following:
        ///
        /// 				           You can't create an alias resource record set in a private hosted zone to
        /// 					route traffic to a CloudFront distribution.
        ///
        /// 				           For information about creating failover resource record sets in a private
        /// 					hosted zone, see Configuring Failover in a Private Hosted Zone in the
        /// 						Amazon Route 53 Developer Guide.
        ///
        public let aliasTarget: AliasTarget?
        public let cidrRoutingConfig: CidrRoutingConfig?
        ///  Failover resource record sets only: To configure failover, you
        /// 			add the Failover element to two resource record sets. For one resource
        /// 			record set, you specify PRIMARY as the value for Failover; for
        /// 			the other resource record set, you specify SECONDARY. In addition, you
        /// 			include the HealthCheckId element and specify the health check that you
        /// 			want Amazon Route 53 to perform for each resource record set.
        /// 		       Except where noted, the following failover behaviors assume that you have included the
        /// 				HealthCheckId element in both resource record sets:
        ///
        /// 				           When the primary resource record set is healthy, Route 53 responds to DNS
        /// 					queries with the applicable value from the primary resource record set
        /// 					regardless of the health of the secondary resource record set.
        ///
        /// 				           When the primary resource record set is unhealthy and the secondary resource
        /// 					record set is healthy, Route 53 responds to DNS queries with the applicable
        /// 					value from the secondary resource record set.
        ///
        /// 				           When the secondary resource record set is unhealthy, Route 53 responds to DNS
        /// 					queries with the applicable value from the primary resource record set
        /// 					regardless of the health of the primary resource record set.
        ///
        /// 				           If you omit the HealthCheckId element for the secondary resource
        /// 					record set, and if the primary resource record set is unhealthy, Route 53 always
        /// 					responds to DNS queries with the applicable value from the secondary resource
        /// 					record set. This is true regardless of the health of the associated
        /// 					endpoint.
        ///
        /// 		       You can't create non-failover resource record sets that have the same values for the
        /// 				Name and Type elements as failover resource record
        /// 			sets.
        /// 		       For failover alias resource record sets, you must also include the
        /// 				EvaluateTargetHealth element and set the value to true.
        /// 		       For more information about configuring failover for Route 53, see the following topics
        /// 			in the Amazon Route 53 Developer Guide:
        ///
        /// 				            Route 53 Health Checks
        /// 						and DNS Failover
        ///
        /// 				            Configuring Failover in a Private Hosted Zone
        ///
        public let failover: ResourceRecordSetFailover?
        ///  Geolocation resource record sets only: A complex type that lets
        /// 			you control how Amazon Route 53 responds to DNS queries based on the geographic origin
        /// 			of the query. For example, if you want all queries from Africa to be routed to a web
        /// 			server with an IP address of 192.0.2.111, create a resource record set with
        /// 			a Type of A and a ContinentCode of
        /// 				AF.
        ///
        /// 			         Although creating geolocation and geolocation alias resource record sets in a
        /// 				private hosted zone is allowed, it's not supported.
        ///
        /// 		       If you create separate resource record sets for overlapping geographic regions (for
        /// 			example, one resource record set for a continent and one for a country on the same
        /// 			continent), priority goes to the smallest geographic region. This allows you to route
        /// 			most queries for a continent to one resource and to route queries for a country on that
        /// 			continent to a different resource.
        /// 		       You can't create two geolocation resource record sets that specify the same geographic
        /// 			location.
        /// 		       The value * in the CountryCode element matches all
        /// 			geographic locations that aren't specified in other geolocation resource record sets
        /// 			that have the same values for the Name and Type
        /// 			elements.
        ///
        /// 			         Geolocation works by mapping IP addresses to locations. However, some IP addresses
        /// 				aren't mapped to geographic locations, so even if you create geolocation resource
        /// 				record sets that cover all seven continents, Route 53 will receive some DNS queries
        /// 				from locations that it can't identify. We recommend that you create a resource
        /// 				record set for which the value of CountryCode is *. Two
        /// 				groups of queries are routed to the resource that you specify in this record:
        /// 				queries that come from locations for which you haven't created geolocation resource
        /// 				record sets and queries from IP addresses that aren't mapped to a location. If you
        /// 				don't create a * resource record set, Route 53 returns a "no answer"
        /// 				response for queries from those locations.
        ///
        /// 		       You can't create non-geolocation resource record sets that have the same values for
        /// 			the Name and Type elements as geolocation resource record
        /// 			sets.
        public let geoLocation: GeoLocation?
        /// If you want Amazon Route 53 to return this resource record set in response to a DNS
        /// 			query only when the status of a health check is healthy, include the
        /// 				HealthCheckId element and specify the ID of the applicable health
        /// 			check.
        /// 		       Route 53 determines whether a resource record set is healthy based on one of the
        /// 			following:
        ///
        /// 				           By periodically sending a request to the endpoint that is specified in the
        /// 					health check
        ///
        /// 				           By aggregating the status of a specified group of health checks (calculated
        /// 					health checks)
        ///
        /// 				           By determining the current state of a CloudWatch alarm (CloudWatch metric
        /// 					health checks)
        ///
        ///
        /// 			         Route 53 doesn't check the health of the endpoint that is specified in the
        /// 				resource record set, for example, the endpoint specified by the IP address in the
        /// 					Value element. When you add a HealthCheckId element to
        /// 				a resource record set, Route 53 checks the health of the endpoint that you specified
        /// 				in the health check.
        ///
        /// 		       For more information, see the following topics in the Amazon Route 53
        /// 				Developer Guide:
        ///
        /// 				            How Amazon Route 53 Determines Whether an Endpoint Is
        /// 					Healthy
        ///
        /// 				            Route 53 Health Checks
        /// 						and DNS Failover
        ///
        /// 				            Configuring Failover in a Private Hosted Zone
        ///
        /// 		        When to Specify HealthCheckId
        /// 		       Specifying a value for HealthCheckId is useful only when Route 53 is
        /// 			choosing between two or more resource record sets to respond to a DNS query, and you
        /// 			want Route 53 to base the choice in part on the status of a health check. Configuring
        /// 			health checks makes sense only in the following configurations:
        ///
        /// 				            Non-alias resource record sets: You're
        /// 					checking the health of a group of non-alias resource record sets that have the
        /// 					same routing policy, name, and type (such as multiple weighted records named
        /// 					www.example.com with a type of A) and you specify health check IDs for all the
        /// 					resource record sets.
        /// 				           If the health check status for a resource record set is healthy, Route 53
        /// 					includes the record among the records that it responds to DNS queries
        /// 					with.
        /// 				           If the health check status for a resource record set is unhealthy, Route 53
        /// 					stops responding to DNS queries using the value for that resource record
        /// 					set.
        /// 				           If the health check status for all resource record sets in the group is
        /// 					unhealthy, Route 53 considers all resource record sets in the group healthy and
        /// 					responds to DNS queries accordingly.
        ///
        /// 				            Alias resource record sets: You specify the
        /// 					following settings:
        ///
        /// 						               You set EvaluateTargetHealth to true for an alias
        /// 							resource record set in a group of resource record sets that have the
        /// 							same routing policy, name, and type (such as multiple weighted records
        /// 							named www.example.com with a type of A).
        ///
        /// 						               You configure the alias resource record set to route traffic to a
        /// 							non-alias resource record set in the same hosted zone.
        ///
        /// 						               You specify a health check ID for the non-alias resource record set.
        ///
        ///
        /// 				           If the health check status is healthy, Route 53 considers the alias resource
        /// 					record set to be healthy and includes the alias record among the records that it
        /// 					responds to DNS queries with.
        /// 				           If the health check status is unhealthy, Route 53 stops responding to DNS
        /// 					queries using the alias resource record set.
        ///
        /// 					             The alias resource record set can also route traffic to a
        /// 							group of non-alias resource record sets that have
        /// 						the same routing policy, name, and type. In that configuration, associate
        /// 						health checks with all of the resource record sets in the group of non-alias
        /// 						resource record sets.
        ///
        ///
        /// 		        Geolocation Routing
        /// 		       For geolocation resource record sets, if an endpoint is unhealthy, Route 53 looks for
        /// 			a resource record set for the larger, associated geographic region. For example, suppose
        /// 			you have resource record sets for a state in the United States, for the entire United
        /// 			States, for North America, and a resource record set that has * for
        /// 				CountryCode is *, which applies to all locations. If the
        /// 			endpoint for the state resource record set is unhealthy, Route 53 checks for healthy
        /// 			resource record sets in the following order until it finds a resource record set for
        /// 			which the endpoint is healthy:
        ///
        /// 				           The United States
        ///
        /// 				           North America
        ///
        /// 				           The default resource record set
        ///
        /// 		        Specifying the Health Check Endpoint by Domain
        /// 			Name
        /// 		       If your health checks specify the endpoint only by domain name, we recommend that you
        /// 			create a separate health check for each endpoint. For example, create a health check for
        /// 			each HTTP server that is serving content for www.example.com.
        /// 			For the value of FullyQualifiedDomainName, specify the domain name of the
        /// 			server (such as us-east-2-www.example.com), not the name of the resource
        /// 			record sets (www.example.com).
        ///
        /// 			         Health check results will be unpredictable if you do the following:
        ///
        /// 					             Create a health check that has the same value for
        /// 							FullyQualifiedDomainName as the name of a resource record
        /// 						set.
        ///
        /// 					             Associate that health check with the resource record set.
        ///
        ///
        public let healthCheckId: String?
        ///  Multivalue answer resource record sets only: To route traffic
        /// 			approximately randomly to multiple resources, such as web servers, create one multivalue
        /// 			answer record for each resource and specify true for
        /// 				MultiValueAnswer. Note the following:
        ///
        /// 				           If you associate a health check with a multivalue answer resource record set,
        /// 					Amazon Route 53 responds to DNS queries with the corresponding IP address only
        /// 					when the health check is healthy.
        ///
        /// 				           If you don't associate a health check with a multivalue answer record, Route
        /// 					53 always considers the record to be healthy.
        ///
        /// 				           Route 53 responds to DNS queries with up to eight healthy records; if you have
        /// 					eight or fewer healthy records, Route 53 responds to all DNS queries with all
        /// 					the healthy records.
        ///
        /// 				           If you have more than eight healthy records, Route 53 responds to different
        /// 					DNS resolvers with different combinations of healthy records.
        ///
        /// 				           When all records are unhealthy, Route 53 responds to DNS queries with up to
        /// 					eight unhealthy records.
        ///
        /// 				           If a resource becomes unavailable after a resolver caches a response, client
        /// 					software typically tries another of the IP addresses in the response.
        ///
        /// 		       You can't create multivalue answer alias records.
        public let multiValueAnswer: Bool?
        /// For ChangeResourceRecordSets requests, the name of the record that you
        /// 			want to create, update, or delete. For ListResourceRecordSets responses,
        /// 			the name of a record in the specified hosted zone.
        /// 		        ChangeResourceRecordSets Only
        /// 		       Enter a fully qualified domain name, for example, www.example.com. You
        /// 			can optionally include a trailing dot. If you omit the trailing dot, Amazon Route 53
        /// 			assumes that the domain name that you specify is fully qualified. This means that Route
        /// 			53 treats www.example.com (without a trailing dot) and
        /// 				www.example.com. (with a trailing dot) as identical.
        /// 		       For information about how to specify characters other than a-z,
        /// 				0-9, and - (hyphen) and how to specify internationalized
        /// 			domain names, see DNS Domain Name
        /// 				Format in the Amazon Route 53 Developer Guide.
        /// 		       You can use the asterisk (*) wildcard to replace the leftmost label in a domain name,
        /// 			for example, *.example.com. Note the following:
        ///
        /// 				           The * must replace the entire label. For example, you can't specify
        /// 						*prod.example.com or prod*.example.com.
        ///
        /// 				           The * can't replace any of the middle labels, for example,
        /// 					marketing.*.example.com.
        ///
        /// 				           If you include * in any position other than the leftmost label in a domain
        /// 					name, DNS treats it as an * character (ASCII 42), not as a wildcard.
        ///
        /// 					             You can't use the * wildcard for resource records sets that have a type of
        /// 						NS.
        ///
        ///
        /// 		       You can use the * wildcard as the leftmost label in a domain name, for example,
        /// 				*.example.com. You can't use an * for one of the middle labels, for
        /// 			example, marketing.*.example.com. In addition, the * must replace the
        /// 			entire label; for example, you can't specify prod*.example.com.
        public let name: String
        ///  Latency-based resource record sets only: The Amazon EC2 Region
        /// 			where you created the resource that this resource record set refers to. The resource
        /// 			typically is an Amazon Web Services resource, such as an EC2 instance or an ELB load
        /// 			balancer, and is referred to by an IP address or a DNS domain name, depending on the
        /// 			record type.
        ///
        /// 		       When Amazon Route 53 receives a DNS query for a domain name and type for which you
        /// 			have created latency resource record sets, Route 53 selects the latency resource record
        /// 			set that has the lowest latency between the end user and the associated Amazon EC2
        /// 			Region. Route 53 then returns the value that is associated with the selected resource
        /// 			record set.
        /// 		       Note the following:
        ///
        /// 				           You can only specify one ResourceRecord per latency resource
        /// 					record set.
        ///
        /// 				           You can only create one latency resource record set for each Amazon EC2
        /// 					Region.
        ///
        /// 				           You aren't required to create latency resource record sets for all Amazon EC2
        /// 					Regions. Route 53 will choose the region with the best latency from among the
        /// 					regions that you create latency resource record sets for.
        ///
        /// 				           You can't create non-latency resource record sets that have the same values
        /// 					for the Name and Type elements as latency resource
        /// 					record sets.
        ///
        public let region: ResourceRecordSetRegion?
        /// Information about the resource records to act upon.
        ///
        /// 			         If you're creating an alias resource record set, omit
        /// 				ResourceRecords.
        ///
        @OptionalCustomCoding<ArrayCoder<_ResourceRecordsEncoding, ResourceRecord>>
        public var resourceRecords: [ResourceRecord]?
        ///  Resource record sets that have a routing policy other than
        /// 				simple: An identifier that differentiates among multiple resource record
        /// 			sets that have the same combination of name and type, such as multiple weighted resource
        /// 			record sets named acme.example.com that have a type of A. In a group of resource record
        /// 			sets that have the same name and type, the value of SetIdentifier must be
        /// 			unique for each resource record set.
        /// 		       For information about routing policies, see Choosing a Routing
        /// 				Policy in the Amazon Route 53 Developer Guide.
        public let setIdentifier: String?
        /// When you create a traffic policy instance, Amazon Route 53 automatically creates a
        /// 			resource record set. TrafficPolicyInstanceId is the ID of the traffic
        /// 			policy instance that Route 53 created this resource record set for.
        ///
        /// 			         To delete the resource record set that is associated with a traffic policy
        /// 				instance, use DeleteTrafficPolicyInstance. Route 53 will delete the
        /// 				resource record set automatically. If you delete the resource record set by using
        /// 					ChangeResourceRecordSets, Route 53 doesn't automatically delete the
        /// 				traffic policy instance, and you'll continue to be charged for it even though it's
        /// 				no longer in use.
        ///
        public let trafficPolicyInstanceId: String?
        /// The resource record cache time to live (TTL), in seconds. Note the following:
        ///
        /// 				           If you're creating or updating an alias resource record set, omit
        /// 						TTL. Amazon Route 53 uses the value of TTL for the
        /// 					alias target.
        ///
        /// 				           If you're associating this resource record set with a health check (if you're
        /// 					adding a HealthCheckId element), we recommend that you specify a
        /// 						TTL of 60 seconds or less so clients respond quickly to changes
        /// 					in health status.
        ///
        /// 				           All of the resource record sets in a group of weighted resource record sets
        /// 					must have the same value for TTL.
        ///
        /// 				           If a group of weighted resource record sets includes one or more weighted
        /// 					alias resource record sets for which the alias target is an ELB load balancer,
        /// 					we recommend that you specify a TTL of 60 seconds for all of the
        /// 					non-alias weighted resource record sets that have the same name and type. Values
        /// 					other than 60 seconds (the TTL for load balancers) will change the effect of the
        /// 					values that you specify for Weight.
        ///
        public let ttl: Int64?
        /// The DNS record type. For information about different record types and how data is
        /// 			encoded for them, see Supported DNS Resource
        /// 				Record Types in the Amazon Route 53 Developer
        /// 			Guide.
        /// 		       Valid values for basic resource record sets: A | AAAA |
        /// 				CAA | CNAME | DS |MX |
        /// 				NAPTR | NS | PTR | SOA |
        /// 				SPF | SRV | TXT
        /// 		       Values for weighted, latency, geolocation, and failover resource record sets:
        /// 				A | AAAA | CAA | CNAME |
        /// 				MX | NAPTR | PTR | SPF |
        /// 				SRV | TXT. When creating a group of weighted, latency,
        /// 			geolocation, or failover resource record sets, specify the same value for all of the
        /// 			resource record sets in the group.
        /// 		       Valid values for multivalue answer resource record sets: A |
        /// 				AAAA | MX | NAPTR | PTR |
        /// 				SPF | SRV | TXT
        ///
        /// 			         SPF records were formerly used to verify the identity of the sender of email
        /// 				messages. However, we no longer recommend that you create resource record sets for
        /// 				which the value of Type is SPF. RFC 7208, Sender
        /// 					Policy Framework (SPF) for Authorizing Use of Domains in Email, Version
        /// 					1, has been updated to say, "...[I]ts existence and mechanism defined
        /// 				in [RFC4408] have led to some interoperability issues. Accordingly, its use is no
        /// 				longer appropriate for SPF version 1; implementations are not to use it." In RFC
        /// 				7208, see section 14.1, The SPF DNS Record Type.
        ///
        /// 		       Values for alias resource record sets:
        ///
        /// 				            Amazon API Gateway custom regional APIs and
        /// 						edge-optimized APIs:
        /// 					             A
        ///
        /// 				            CloudFront distributions:
        /// 					             A
        /// 				           If IPv6 is enabled for the distribution, create two resource record sets to
        /// 					route traffic to your distribution, one with a value of A and one
        /// 					with a value of AAAA.
        ///
        /// 				            Amazon API Gateway environment that has a regionalized
        /// 						subdomain: A
        ///
        /// 				            ELB load balancers:
        /// 					             A | AAAA
        ///
        /// 				            Amazon S3 buckets:
        /// 					             A
        ///
        /// 				            Amazon Virtual Private Cloud interface VPC
        /// 						endpoints
        /// 					             A
        ///
        /// 				            Another resource record set in this hosted
        /// 						zone: Specify the type of the resource record set that you're
        /// 					creating the alias for. All values are supported except NS and
        /// 						SOA.
        ///
        /// 					             If you're creating an alias record that has the same name as the hosted
        /// 						zone (known as the zone apex), you can't route traffic to a record for which
        /// 						the value of Type is CNAME. This is because the
        /// 						alias record must have the same type as the record you're routing traffic
        /// 						to, and creating a CNAME record for the zone apex isn't supported even for
        /// 						an alias record.
        ///
        ///
        public let type: RRType
        ///  Weighted resource record sets only: Among resource record sets
        /// 			that have the same combination of DNS name and type, a value that determines the
        /// 			proportion of DNS queries that Amazon Route 53 responds to using the current resource
        /// 			record set. Route 53 calculates the sum of the weights for the resource record sets that
        /// 			have the same combination of DNS name and type. Route 53 then responds to queries based
        /// 			on the ratio of a resource's weight to the total. Note the following:
        ///
        /// 				           You must specify a value for the Weight element for every
        /// 					weighted resource record set.
        ///
        /// 				           You can only specify one ResourceRecord per weighted resource
        /// 					record set.
        ///
        /// 				           You can't create latency, failover, or geolocation resource record sets that
        /// 					have the same values for the Name and Type elements as
        /// 					weighted resource record sets.
        ///
        /// 				           You can create a maximum of 100 weighted resource record sets that have the
        /// 					same values for the Name and Type elements.
        ///
        /// 				           For weighted (but not weighted alias) resource record sets, if you set
        /// 						Weight to 0 for a resource record set, Route 53
        /// 					never responds to queries with the applicable value for that resource record
        /// 					set. However, if you set Weight to 0 for all resource
        /// 					record sets that have the same combination of DNS name and type, traffic is
        /// 					routed to all resources with equal probability.
        /// 				           The effect of setting Weight to 0 is different when
        /// 					you associate health checks with weighted resource record sets. For more
        /// 					information, see Options for Configuring Route 53 Active-Active and Active-Passive
        /// 						Failover in the Amazon Route 53 Developer
        /// 					Guide.
        ///
        public let weight: Int64?

        public init(aliasTarget: AliasTarget? = nil, cidrRoutingConfig: CidrRoutingConfig? = nil, failover: ResourceRecordSetFailover? = nil, geoLocation: GeoLocation? = nil, healthCheckId: String? = nil, multiValueAnswer: Bool? = nil, name: String, region: ResourceRecordSetRegion? = nil, resourceRecords: [ResourceRecord]? = nil, setIdentifier: String? = nil, trafficPolicyInstanceId: String? = nil, ttl: Int64? = nil, type: RRType, weight: Int64? = nil) {
            self.aliasTarget = aliasTarget
            self.cidrRoutingConfig = cidrRoutingConfig
            self.failover = failover
            self.geoLocation = geoLocation
            self.healthCheckId = healthCheckId
            self.multiValueAnswer = multiValueAnswer
            self.name = name
            self.region = region
            self.resourceRecords = resourceRecords
            self.setIdentifier = setIdentifier
            self.trafficPolicyInstanceId = trafficPolicyInstanceId
            self.ttl = ttl
            self.type = type
            self.weight = weight
        }

        public func validate(name: String) throws {
            try self.aliasTarget?.validate(name: "\(name).aliasTarget")
            try self.cidrRoutingConfig?.validate(name: "\(name).cidrRoutingConfig")
            try self.geoLocation?.validate(name: "\(name).geoLocation")
            try self.validate(self.healthCheckId, name: "healthCheckId", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, max: 1024)
            try self.resourceRecords?.forEach {
                try $0.validate(name: "\(name).resourceRecords[]")
            }
            try self.validate(self.resourceRecords, name: "resourceRecords", parent: name, min: 1)
            try self.validate(self.setIdentifier, name: "setIdentifier", parent: name, max: 128)
            try self.validate(self.setIdentifier, name: "setIdentifier", parent: name, min: 1)
            try self.validate(self.trafficPolicyInstanceId, name: "trafficPolicyInstanceId", parent: name, max: 36)
            try self.validate(self.trafficPolicyInstanceId, name: "trafficPolicyInstanceId", parent: name, min: 1)
            try self.validate(self.ttl, name: "ttl", parent: name, max: 2_147_483_647)
            try self.validate(self.ttl, name: "ttl", parent: name, min: 0)
            try self.validate(self.weight, name: "weight", parent: name, max: 255)
            try self.validate(self.weight, name: "weight", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case aliasTarget = "AliasTarget"
            case cidrRoutingConfig = "CidrRoutingConfig"
            case failover = "Failover"
            case geoLocation = "GeoLocation"
            case healthCheckId = "HealthCheckId"
            case multiValueAnswer = "MultiValueAnswer"
            case name = "Name"
            case region = "Region"
            case resourceRecords = "ResourceRecords"
            case setIdentifier = "SetIdentifier"
            case trafficPolicyInstanceId = "TrafficPolicyInstanceId"
            case ttl = "TTL"
            case type = "Type"
            case weight = "Weight"
        }
    }

    public struct ResourceTagSet: AWSDecodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The ID for the specified resource.
        public let resourceId: String?
        /// The type of the resource.
        ///
        /// 				           The resource type for health checks is healthcheck.
        ///
        /// 				           The resource type for hosted zones is hostedzone.
        ///
        public let resourceType: TagResourceType?
        /// The tags associated with the specified resource.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?

        public init(resourceId: String? = nil, resourceType: TagResourceType? = nil, tags: [Tag]? = nil) {
            self.resourceId = resourceId
            self.resourceType = resourceType
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
            case resourceType = "ResourceType"
            case tags = "Tags"
        }
    }

    public struct ReusableDelegationSetLimit: AWSDecodableShape {
        /// The limit that you requested: MAX_ZONES_BY_REUSABLE_DELEGATION_SET, the
        /// 			maximum number of hosted zones that you can associate with the specified reusable
        /// 			delegation set.
        public let type: ReusableDelegationSetLimitType
        /// The current value for the MAX_ZONES_BY_REUSABLE_DELEGATION_SET
        /// 			limit.
        public let value: Int64

        public init(type: ReusableDelegationSetLimitType, value: Int64) {
            self.type = type
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case type = "Type"
            case value = "Value"
        }
    }

    public struct StatusReport: AWSDecodableShape {
        /// The date and time that the health checker performed the health check in ISO 8601 format and Coordinated
        /// 			Universal Time (UTC). For example, the value 2017-03-27T17:48:16.751Z
        /// 			represents March 27, 2017 at 17:48:16.751 UTC.
        public let checkedTime: Date?
        /// A description of the status of the health check endpoint as reported by one of the
        /// 			Amazon Route 53 health checkers.
        public let status: String?

        public init(checkedTime: Date? = nil, status: String? = nil) {
            self.checkedTime = checkedTime
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case checkedTime = "CheckedTime"
            case status = "Status"
        }
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// The value of Key depends on the operation that you want to
        /// 			perform:
        ///
        /// 				            Add a tag to a health check or hosted zone:
        /// 						Key is the name that you want to give the new tag.
        ///
        /// 				            Edit a tag: Key is the name of
        /// 					the tag that you want to change the Value for.
        ///
        /// 				            Delete a key: Key is the name
        /// 					of the tag you want to remove.
        ///
        /// 				            Give a name to a health check: Edit the
        /// 					default Name tag. In the Amazon Route 53 console, the list of your
        /// 					health checks includes a Name column that lets
        /// 					you see the name that you've given to each health check.
        ///
        public let key: String?
        /// The value of Value depends on the operation that you want to
        /// 			perform:
        ///
        /// 				            Add a tag to a health check or hosted zone:
        /// 						Value is the value that you want to give the new tag.
        ///
        /// 				            Edit a tag: Value is the new
        /// 					value that you want to assign the tag.
        ///
        public let value: String?

        public init(key: String? = nil, value: String? = nil) {
            self.key = key
            self.value = value
        }

        public func validate(name: String) throws {
            try self.validate(self.key, name: "key", parent: name, max: 128)
            try self.validate(self.value, name: "value", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TestDNSAnswerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "edns0ClientSubnetIP", location: .querystring("edns0clientsubnetip")),
            AWSMemberEncoding(label: "edns0ClientSubnetMask", location: .querystring("edns0clientsubnetmask")),
            AWSMemberEncoding(label: "hostedZoneId", location: .querystring("hostedzoneid")),
            AWSMemberEncoding(label: "recordName", location: .querystring("recordname")),
            AWSMemberEncoding(label: "recordType", location: .querystring("recordtype")),
            AWSMemberEncoding(label: "resolverIP", location: .querystring("resolverip"))
        ]

        /// If the resolver that you specified for resolverip supports EDNS0, specify the IPv4 or
        /// 			IPv6 address of a client in the applicable location, for example,
        /// 				192.0.2.44 or 2001:db8:85a3::8a2e:370:7334.
        public let edns0ClientSubnetIP: String?
        /// If you specify an IP address for edns0clientsubnetip, you can optionally
        /// 			specify the number of bits of the IP address that you want the checking tool to include
        /// 			in the DNS query. For example, if you specify 192.0.2.44 for
        /// 				edns0clientsubnetip and 24 for
        /// 				edns0clientsubnetmask, the checking tool will simulate a request from
        /// 			192.0.2.0/24. The default value is 24 bits for IPv4 addresses and 64 bits for IPv6
        /// 			addresses.
        /// 		       The range of valid values depends on whether edns0clientsubnetip is an
        /// 			IPv4 or an IPv6 address:
        ///
        /// 				            IPv4: Specify a value between 0 and 32
        ///
        /// 				            IPv6: Specify a value between 0 and
        /// 					128
        ///
        public let edns0ClientSubnetMask: String?
        /// The ID of the hosted zone that you want Amazon Route 53 to simulate a query
        /// 			for.
        public let hostedZoneId: String
        /// The name of the resource record set that you want Amazon Route 53 to simulate a query
        /// 			for.
        public let recordName: String
        /// The type of the resource record set.
        public let recordType: RRType
        /// If you want to simulate a request from a specific DNS resolver, specify the IP address
        /// 			for that resolver. If you omit this value, TestDnsAnswer uses the IP
        /// 			address of a DNS resolver in the Amazon Web Services US East (N. Virginia) Region
        /// 				(us-east-1).
        public let resolverIP: String?

        public init(edns0ClientSubnetIP: String? = nil, edns0ClientSubnetMask: String? = nil, hostedZoneId: String, recordName: String, recordType: RRType, resolverIP: String? = nil) {
            self.edns0ClientSubnetIP = edns0ClientSubnetIP
            self.edns0ClientSubnetMask = edns0ClientSubnetMask
            self.hostedZoneId = hostedZoneId
            self.recordName = recordName
            self.recordType = recordType
            self.resolverIP = resolverIP
        }

        public func validate(name: String) throws {
            try self.validate(self.edns0ClientSubnetIP, name: "edns0ClientSubnetIP", parent: name, max: 45)
            try self.validate(self.edns0ClientSubnetIP, name: "edns0ClientSubnetIP", parent: name, pattern: "^(^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)$")
            try self.validate(self.edns0ClientSubnetMask, name: "edns0ClientSubnetMask", parent: name, max: 3)
            try self.validate(self.hostedZoneId, name: "hostedZoneId", parent: name, max: 32)
            try self.validate(self.recordName, name: "recordName", parent: name, max: 1024)
            try self.validate(self.resolverIP, name: "resolverIP", parent: name, max: 45)
            try self.validate(self.resolverIP, name: "resolverIP", parent: name, pattern: "^(^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct TestDNSAnswerResponse: AWSDecodableShape {
        public struct _RecordDataEncoding: ArrayCoderProperties { public static let member = "RecordDataEntry" }

        /// The Amazon Route 53 name server used to respond to the request.
        public let nameserver: String
        /// The protocol that Amazon Route 53 used to respond to the request, either
        /// 				UDP or TCP.
        public let `protocol`: String
        /// A list that contains values that Amazon Route 53 returned for this resource record
        /// 			set.
        @CustomCoding<ArrayCoder<_RecordDataEncoding, String>>
        public var recordData: [String]
        /// The name of the resource record set that you submitted a request for.
        public let recordName: String
        /// The type of the resource record set that you submitted a request for.
        public let recordType: RRType
        /// A code that indicates whether the request is valid or not. The most common response
        /// 			code is NOERROR, meaning that the request is valid. If the response is not
        /// 			valid, Amazon Route 53 returns a response code that describes the error. For a list of
        /// 			possible response codes, see DNS RCODES on the IANA website.
        public let responseCode: String

        public init(nameserver: String, protocol: String, recordData: [String], recordName: String, recordType: RRType, responseCode: String) {
            self.nameserver = nameserver
            self.`protocol` = `protocol`
            self.recordData = recordData
            self.recordName = recordName
            self.recordType = recordType
            self.responseCode = responseCode
        }

        private enum CodingKeys: String, CodingKey {
            case nameserver = "Nameserver"
            case `protocol` = "Protocol"
            case recordData = "RecordData"
            case recordName = "RecordName"
            case recordType = "RecordType"
            case responseCode = "ResponseCode"
        }
    }

    public struct TrafficPolicy: AWSDecodableShape {
        /// The comment that you specify in the CreateTrafficPolicy request, if
        /// 			any.
        public let comment: String?
        /// The definition of a traffic policy in JSON format. You specify the JSON document to
        /// 			use for a new traffic policy in the CreateTrafficPolicy request. For more
        /// 			information about the JSON format, see Traffic Policy Document Format.
        public let document: String
        /// The ID that Amazon Route 53 assigned to a traffic policy when you created it.
        public let id: String
        /// The name that you specified when you created the traffic policy.
        public let name: String
        /// The DNS type of the resource record sets that Amazon Route 53 creates when you use a
        /// 			traffic policy to create a traffic policy instance.
        public let type: RRType
        /// The version number that Amazon Route 53 assigns to a traffic policy. For a new traffic
        /// 			policy, the value of Version is always 1.
        public let version: Int

        public init(comment: String? = nil, document: String, id: String, name: String, type: RRType, version: Int) {
            self.comment = comment
            self.document = document
            self.id = id
            self.name = name
            self.type = type
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
            case document = "Document"
            case id = "Id"
            case name = "Name"
            case type = "Type"
            case version = "Version"
        }
    }

    public struct TrafficPolicyInstance: AWSDecodableShape {
        /// The ID of the hosted zone that Amazon Route 53 created resource record sets in.
        public let hostedZoneId: String
        /// The ID that Amazon Route 53 assigned to the new traffic policy instance.
        public let id: String
        /// If State is Failed, an explanation of the reason for the
        /// 			failure. If State is another value, Message is empty.
        public let message: String
        /// The DNS name, such as www.example.com, for which Amazon Route 53 responds to queries
        /// 			by using the resource record sets that are associated with this traffic policy instance.
        ///
        public let name: String
        /// The value of State is one of the following values:
        /// 		        Applied
        /// 					          Amazon Route 53 has finished creating resource record sets, and changes
        /// 						have propagated to all Route 53 edge locations.
        /// 				         Creating
        /// 					          Route 53 is creating the resource record sets. Use
        /// 							GetTrafficPolicyInstance to confirm that the
        /// 							CreateTrafficPolicyInstance request completed
        /// 						successfully.
        /// 				         Failed
        /// 					          Route 53 wasn't able to create or update the resource record sets. When
        /// 						the value of State is Failed, see
        /// 							Message for an explanation of what caused the request to
        /// 						fail.
        ///
        public let state: String
        /// The ID of the traffic policy that Amazon Route 53 used to create resource record sets
        /// 			in the specified hosted zone.
        public let trafficPolicyId: String
        /// The DNS type that Amazon Route 53 assigned to all of the resource record sets that it
        /// 			created for this traffic policy instance.
        public let trafficPolicyType: RRType
        /// The version of the traffic policy that Amazon Route 53 used to create resource record
        /// 			sets in the specified hosted zone.
        public let trafficPolicyVersion: Int
        /// The TTL that Amazon Route 53 assigned to all of the resource record sets that it
        /// 			created in the specified hosted zone.
        public let ttl: Int64

        public init(hostedZoneId: String, id: String, message: String, name: String, state: String, trafficPolicyId: String, trafficPolicyType: RRType, trafficPolicyVersion: Int, ttl: Int64) {
            self.hostedZoneId = hostedZoneId
            self.id = id
            self.message = message
            self.name = name
            self.state = state
            self.trafficPolicyId = trafficPolicyId
            self.trafficPolicyType = trafficPolicyType
            self.trafficPolicyVersion = trafficPolicyVersion
            self.ttl = ttl
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZoneId = "HostedZoneId"
            case id = "Id"
            case message = "Message"
            case name = "Name"
            case state = "State"
            case trafficPolicyId = "TrafficPolicyId"
            case trafficPolicyType = "TrafficPolicyType"
            case trafficPolicyVersion = "TrafficPolicyVersion"
            case ttl = "TTL"
        }
    }

    public struct TrafficPolicySummary: AWSDecodableShape {
        /// The ID that Amazon Route 53 assigned to the traffic policy when you created it.
        public let id: String
        /// The version number of the latest version of the traffic policy.
        public let latestVersion: Int
        /// The name that you specified for the traffic policy when you created it.
        public let name: String
        /// The number of traffic policies that are associated with the current Amazon Web Services account.
        public let trafficPolicyCount: Int
        /// The DNS type of the resource record sets that Amazon Route 53 creates when you use a
        /// 			traffic policy to create a traffic policy instance.
        public let type: RRType

        public init(id: String, latestVersion: Int, name: String, trafficPolicyCount: Int, type: RRType) {
            self.id = id
            self.latestVersion = latestVersion
            self.name = name
            self.trafficPolicyCount = trafficPolicyCount
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case id = "Id"
            case latestVersion = "LatestVersion"
            case name = "Name"
            case trafficPolicyCount = "TrafficPolicyCount"
            case type = "Type"
        }
    }

    public struct UpdateHealthCheckRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "healthCheckId", location: .uri("HealthCheckId"))
        ]
        public struct _ChildHealthChecksEncoding: ArrayCoderProperties { public static let member = "ChildHealthCheck" }
        public struct _RegionsEncoding: ArrayCoderProperties { public static let member = "Region" }
        public struct _ResetElementsEncoding: ArrayCoderProperties { public static let member = "ResettableElementName" }

        /// A complex type that identifies the CloudWatch alarm that you want Amazon Route 53
        /// 			health checkers to use to determine whether the specified health check is
        /// 			healthy.
        public let alarmIdentifier: AlarmIdentifier?
        /// A complex type that contains one ChildHealthCheck element for each health
        /// 			check that you want to associate with a CALCULATED health check.
        @OptionalCustomCoding<ArrayCoder<_ChildHealthChecksEncoding, String>>
        public var childHealthChecks: [String]?
        /// Stops Route 53 from performing health checks. When you disable a health check, here's
        /// 			what happens:
        ///
        /// 				            Health checks that check the health of
        /// 						endpoints: Route 53 stops submitting requests to your
        /// 					application, server, or other resource.
        ///
        /// 				            Calculated health checks: Route 53 stops
        /// 					aggregating the status of the referenced health checks.
        ///
        /// 				            Health checks that monitor CloudWatch alarms:
        /// 					Route 53 stops monitoring the corresponding CloudWatch metrics.
        ///
        /// 		       After you disable a health check, Route 53 considers the status of the health check to
        /// 			always be healthy. If you configured DNS failover, Route 53 continues to route traffic
        /// 			to the corresponding resources. If you want to stop routing traffic to a resource,
        /// 			change the value of Inverted.
        /// 		       Charges for a health check still apply when the health check is disabled. For more
        /// 			information, see Amazon Route 53
        /// 				Pricing.
        public let disabled: Bool?
        /// Specify whether you want Amazon Route 53 to send the value of
        /// 				FullyQualifiedDomainName to the endpoint in the
        /// 				client_hello message during TLS negotiation. This allows
        /// 			the endpoint to respond to HTTPS health check requests with the applicable
        /// 			SSL/TLS certificate.
        /// 		       Some endpoints require that HTTPS requests include the host name in the
        /// 				client_hello message. If you don't enable SNI, the status of the health
        /// 			check will be SSL alert handshake_failure. A health check can also have
        /// 			that status for other reasons. If SNI is enabled and you're still getting the error,
        /// 			check the SSL/TLS configuration on your endpoint and confirm that your certificate is
        /// 			valid.
        /// 		       The SSL/TLS certificate on your endpoint includes a domain name in the Common
        /// 				Name field and possibly several more in the Subject Alternative
        /// 				Names field. One of the domain names in the certificate should match the
        /// 			value that you specify for FullyQualifiedDomainName. If the endpoint
        /// 			responds to the client_hello message with a certificate that does not
        /// 			include the domain name that you specified in FullyQualifiedDomainName, a
        /// 			health checker will retry the handshake. In the second attempt, the health checker will
        /// 			omit FullyQualifiedDomainName from the client_hello
        /// 			message.
        public let enableSNI: Bool?
        /// The number of consecutive health checks that an endpoint must pass or fail for Amazon
        /// 			Route 53 to change the current status of the endpoint from unhealthy to healthy or vice
        /// 			versa. For more information, see How Amazon Route 53 Determines Whether an Endpoint Is Healthy in the
        /// 				Amazon Route 53 Developer Guide.
        /// 		       If you don't specify a value for FailureThreshold, the default value is
        /// 			three health checks.
        public let failureThreshold: Int?
        /// Amazon Route 53 behavior depends on whether you specify a value for
        /// 				IPAddress.
        ///
        /// 			         If a health check already has a value for IPAddress, you can change
        /// 				the value. However, you can't update an existing health check to add or remove the
        /// 				value of IPAddress.
        ///
        /// 		        If you specify a value for
        /// 			         IPAddress:
        /// 		       Route 53 sends health check requests to the specified IPv4 or IPv6 address and passes
        /// 			the value of FullyQualifiedDomainName in the Host header for
        /// 			all health checks except TCP health checks. This is typically the fully qualified DNS
        /// 			name of the endpoint on which you want Route 53 to perform health checks.
        /// 		       When Route 53 checks the health of an endpoint, here is how it constructs the
        /// 				Host header:
        ///
        /// 				           If you specify a value of 80 for Port and
        /// 						HTTP or HTTP_STR_MATCH for Type,
        /// 					Route 53 passes the value of FullyQualifiedDomainName to the
        /// 					endpoint in the Host header.
        ///
        /// 				           If you specify a value of 443 for Port and
        /// 						HTTPS or HTTPS_STR_MATCH for Type,
        /// 					Route 53 passes the value of FullyQualifiedDomainName to the
        /// 					endpoint in the Host header.
        ///
        /// 				           If you specify another value for Port and any value except
        /// 						TCP for Type, Route 53 passes
        /// 							 FullyQualifiedDomainName:Port
        /// 					to the endpoint in the Host header.
        ///
        /// 		       If you don't specify a value for FullyQualifiedDomainName, Route 53
        /// 			substitutes the value of IPAddress in the Host header in each
        /// 			of the above cases.
        /// 		        If you don't specify a value for
        /// 			         IPAddress:
        /// 		       If you don't specify a value for IPAddress, Route 53 sends a DNS request
        /// 			to the domain that you specify in FullyQualifiedDomainName at the interval
        /// 			you specify in RequestInterval. Using an IPv4 address that is returned by
        /// 			DNS, Route 53 then checks the health of the endpoint.
        ///
        /// 			         If you don't specify a value for IPAddress, Route 53 uses only IPv4
        /// 				to send health checks to the endpoint. If there's no resource record set with a type
        /// 				of A for the name that you specify for FullyQualifiedDomainName, the
        /// 				health check fails with a "DNS resolution failed" error.
        ///
        /// 		       If you want to check the health of weighted, latency, or failover resource record sets
        /// 			and you choose to specify the endpoint only by FullyQualifiedDomainName, we
        /// 			recommend that you create a separate health check for each endpoint. For example, create
        /// 			a health check for each HTTP server that is serving content for www.example.com. For the
        /// 			value of FullyQualifiedDomainName, specify the domain name of the server
        /// 			(such as us-east-2-www.example.com), not the name of the resource record
        /// 			sets (www.example.com).
        ///
        /// 			         In this configuration, if the value of FullyQualifiedDomainName
        /// 				matches the name of the resource record sets and you then associate the health check
        /// 				with those resource record sets, health check results will be unpredictable.
        ///
        /// 		       In addition, if the value of Type is HTTP,
        /// 				HTTPS, HTTP_STR_MATCH, or HTTPS_STR_MATCH,
        /// 			Route 53 passes the value of FullyQualifiedDomainName in the
        /// 				Host header, as it does when you specify a value for
        /// 				IPAddress. If the value of Type is TCP, Route
        /// 			53 doesn't pass a Host header.
        public let fullyQualifiedDomainName: String?
        /// The ID for the health check for which you want detailed information. When you created
        /// 			the health check, CreateHealthCheck returned the ID in the response, in the
        /// 				HealthCheckId element.
        public let healthCheckId: String
        /// A sequential counter that Amazon Route 53 sets to 1 when you create a
        /// 			health check and increments by 1 each time you update settings for the health
        /// 			check.
        /// 		       We recommend that you use GetHealthCheck or ListHealthChecks
        /// 			to get the current value of HealthCheckVersion for the health check that
        /// 			you want to update, and that you include that value in your
        /// 				UpdateHealthCheck request. This prevents Route 53 from overwriting an
        /// 			intervening update:
        ///
        /// 				           If the value in the UpdateHealthCheck request matches the value
        /// 					of HealthCheckVersion in the health check, Route 53 updates the
        /// 					health check with the new settings.
        ///
        /// 				           If the value of HealthCheckVersion in the health check is
        /// 					greater, the health check was changed after you got the version number. Route 53
        /// 					does not update the health check, and it returns a
        /// 						HealthCheckVersionMismatch error.
        ///
        public let healthCheckVersion: Int64?
        /// The number of child health checks that are associated with a CALCULATED
        /// 			health that Amazon Route 53 must consider healthy for the CALCULATED health
        /// 			check to be considered healthy. To specify the child health checks that you want to
        /// 			associate with a CALCULATED health check, use the
        /// 				ChildHealthChecks and ChildHealthCheck elements.
        /// 		       Note the following:
        ///
        /// 				           If you specify a number greater than the number of child health checks, Route
        /// 					53 always considers this health check to be unhealthy.
        ///
        /// 				           If you specify 0, Route 53 always considers this health check to
        /// 					be healthy.
        ///
        public let healthThreshold: Int?
        /// When CloudWatch has insufficient data about the metric to determine the alarm state,
        /// 			the status that you want Amazon Route 53 to assign to the health check:
        ///
        /// 				            Healthy: Route 53 considers the health check to be
        /// 					healthy.
        ///
        /// 				            Unhealthy: Route 53 considers the health check to be
        /// 					unhealthy.
        ///
        /// 				            LastKnownStatus: By default, Route 53 uses the status of the
        /// 					health check from the last time CloudWatch had sufficient data to determine the
        /// 					alarm state. For new health checks that have no last known status, the status
        /// 					for the health check is healthy.
        ///
        public let insufficientDataHealthStatus: InsufficientDataHealthStatus?
        /// Specify whether you want Amazon Route 53 to invert the status of a health check, for
        /// 			example, to consider a health check unhealthy when it otherwise would be considered
        /// 			healthy.
        public let inverted: Bool?
        /// The IPv4 or IPv6 IP address for the endpoint that you want Amazon Route 53 to perform
        /// 			health checks on. If you don't specify a value for IPAddress, Route 53
        /// 			sends a DNS request to resolve the domain name that you specify in
        /// 				FullyQualifiedDomainName at the interval that you specify in
        /// 				RequestInterval. Using an IP address that is returned by DNS, Route 53
        /// 			then checks the health of the endpoint.
        /// 		       Use one of the following formats for the value of IPAddress:
        ///
        /// 				            IPv4 address: four values between 0 and 255,
        /// 					separated by periods (.), for example, 192.0.2.44.
        ///
        /// 				            IPv6 address: eight groups of four
        /// 					hexadecimal values, separated by colons (:), for example,
        /// 						2001:0db8:85a3:0000:0000:abcd:0001:2345. You can also shorten
        /// 					IPv6 addresses as described in RFC 5952, for example,
        /// 						2001:db8:85a3::abcd:1:2345.
        ///
        /// 		       If the endpoint is an EC2 instance, we recommend that you create an Elastic IP
        /// 			address, associate it with your EC2 instance, and specify the Elastic IP address for
        /// 				IPAddress. This ensures that the IP address of your instance never
        /// 			changes. For more information, see the applicable documentation:
        ///
        /// 				           Linux: Elastic IP
        /// 						Addresses (EIP) in the Amazon EC2 User Guide for Linux
        /// 						Instances
        ///
        /// 				           Windows: Elastic IP
        /// 						Addresses (EIP) in the Amazon EC2 User Guide for Windows
        /// 						Instances
        ///
        ///
        /// 			         If a health check already has a value for IPAddress, you can change
        /// 				the value. However, you can't update an existing health check to add or remove the
        /// 				value of IPAddress.
        ///
        /// 		       For more information, see FullyQualifiedDomainName.
        /// 		       Constraints: Route 53 can't check the health of endpoints for which the IP address is
        /// 			in local, private, non-routable, or multicast ranges. For more information about IP
        /// 			addresses for which you can't create health checks, see the following documents:
        ///
        /// 				            RFC 5735, Special Use IPv4
        /// 						Addresses
        ///
        /// 				            RFC 6598, IANA-Reserved IPv4
        /// 						Prefix for Shared Address Space
        ///
        /// 				            RFC 5156, Special-Use IPv6
        /// 						Addresses
        ///
        public let ipAddress: String?
        /// The port on the endpoint that you want Amazon Route 53 to perform health checks
        /// 			on.
        ///
        /// 			         Don't specify a value for Port when you specify a value for
        /// 					Type of CLOUDWATCH_METRIC or
        /// 				CALCULATED.
        ///
        public let port: Int?
        /// A complex type that contains one Region element for each region that you
        /// 			want Amazon Route 53 health checkers to check the specified endpoint from.
        @OptionalCustomCoding<ArrayCoder<_RegionsEncoding, HealthCheckRegion>>
        public var regions: [HealthCheckRegion]?
        /// A complex type that contains one ResettableElementName element for each
        /// 			element that you want to reset to the default value. Valid values for
        /// 				ResettableElementName include the following:
        ///
        /// 				            ChildHealthChecks: Amazon Route 53 resets ChildHealthChecks to null.
        ///
        /// 				            FullyQualifiedDomainName: Route 53 resets FullyQualifiedDomainName. to null.
        ///
        /// 				            Regions: Route 53 resets the Regions list to the default set of regions.
        ///
        /// 				            ResourcePath: Route 53 resets ResourcePath to null.
        ///
        @OptionalCustomCoding<ArrayCoder<_ResetElementsEncoding, ResettableElementName>>
        public var resetElements: [ResettableElementName]?
        /// The path that you want Amazon Route 53 to request when performing health checks. The
        /// 			path can be any value for which your endpoint will return an HTTP status code of 2xx or
        /// 			3xx when the endpoint is healthy, for example the file /docs/route53-health-check.html.
        /// 			You can also include query string parameters, for example,
        /// 				/welcome.html?language=jp&login=y.
        /// 		       Specify this value only if you want to change it.
        public let resourcePath: String?
        /// If the value of Type is HTTP_STR_MATCH or
        /// 				HTTPS_STR_MATCH, the string that you want Amazon Route 53 to search for
        /// 			in the response body from the specified resource. If the string appears in the response
        /// 			body, Route 53 considers the resource healthy. (You can't change the value of
        /// 				Type when you update a health check.)
        public let searchString: String?

        public init(alarmIdentifier: AlarmIdentifier? = nil, childHealthChecks: [String]? = nil, disabled: Bool? = nil, enableSNI: Bool? = nil, failureThreshold: Int? = nil, fullyQualifiedDomainName: String? = nil, healthCheckId: String, healthCheckVersion: Int64? = nil, healthThreshold: Int? = nil, insufficientDataHealthStatus: InsufficientDataHealthStatus? = nil, inverted: Bool? = nil, ipAddress: String? = nil, port: Int? = nil, regions: [HealthCheckRegion]? = nil, resetElements: [ResettableElementName]? = nil, resourcePath: String? = nil, searchString: String? = nil) {
            self.alarmIdentifier = alarmIdentifier
            self.childHealthChecks = childHealthChecks
            self.disabled = disabled
            self.enableSNI = enableSNI
            self.failureThreshold = failureThreshold
            self.fullyQualifiedDomainName = fullyQualifiedDomainName
            self.healthCheckId = healthCheckId
            self.healthCheckVersion = healthCheckVersion
            self.healthThreshold = healthThreshold
            self.insufficientDataHealthStatus = insufficientDataHealthStatus
            self.inverted = inverted
            self.ipAddress = ipAddress
            self.port = port
            self.regions = regions
            self.resetElements = resetElements
            self.resourcePath = resourcePath
            self.searchString = searchString
        }

        public func validate(name: String) throws {
            try self.alarmIdentifier?.validate(name: "\(name).alarmIdentifier")
            try self.childHealthChecks?.forEach {
                try validate($0, name: "childHealthChecks[]", parent: name, max: 64)
            }
            try self.validate(self.childHealthChecks, name: "childHealthChecks", parent: name, max: 256)
            try self.validate(self.failureThreshold, name: "failureThreshold", parent: name, max: 10)
            try self.validate(self.failureThreshold, name: "failureThreshold", parent: name, min: 1)
            try self.validate(self.fullyQualifiedDomainName, name: "fullyQualifiedDomainName", parent: name, max: 255)
            try self.validate(self.healthCheckId, name: "healthCheckId", parent: name, max: 64)
            try self.validate(self.healthCheckVersion, name: "healthCheckVersion", parent: name, min: 1)
            try self.validate(self.healthThreshold, name: "healthThreshold", parent: name, max: 256)
            try self.validate(self.healthThreshold, name: "healthThreshold", parent: name, min: 0)
            try self.validate(self.ipAddress, name: "ipAddress", parent: name, max: 45)
            try self.validate(self.ipAddress, name: "ipAddress", parent: name, pattern: "^(^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)$")
            try self.validate(self.port, name: "port", parent: name, max: 65535)
            try self.validate(self.port, name: "port", parent: name, min: 1)
            try self.validate(self.regions, name: "regions", parent: name, max: 64)
            try self.validate(self.regions, name: "regions", parent: name, min: 3)
            try self.validate(self.resetElements, name: "resetElements", parent: name, max: 64)
            try self.validate(self.resourcePath, name: "resourcePath", parent: name, max: 255)
            try self.validate(self.searchString, name: "searchString", parent: name, max: 255)
        }

        private enum CodingKeys: String, CodingKey {
            case alarmIdentifier = "AlarmIdentifier"
            case childHealthChecks = "ChildHealthChecks"
            case disabled = "Disabled"
            case enableSNI = "EnableSNI"
            case failureThreshold = "FailureThreshold"
            case fullyQualifiedDomainName = "FullyQualifiedDomainName"
            case healthCheckVersion = "HealthCheckVersion"
            case healthThreshold = "HealthThreshold"
            case insufficientDataHealthStatus = "InsufficientDataHealthStatus"
            case inverted = "Inverted"
            case ipAddress = "IPAddress"
            case port = "Port"
            case regions = "Regions"
            case resetElements = "ResetElements"
            case resourcePath = "ResourcePath"
            case searchString = "SearchString"
        }
    }

    public struct UpdateHealthCheckResponse: AWSDecodableShape {
        /// A complex type that contains the response to an UpdateHealthCheck
        /// 			request.
        public let healthCheck: HealthCheck

        public init(healthCheck: HealthCheck) {
            self.healthCheck = healthCheck
        }

        private enum CodingKeys: String, CodingKey {
            case healthCheck = "HealthCheck"
        }
    }

    public struct UpdateHostedZoneCommentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The new comment for the hosted zone. If you don't specify a value for
        /// 				Comment, Amazon Route 53 deletes the existing value of the
        /// 				Comment element, if any.
        public let comment: String?
        /// The ID for the hosted zone that you want to update the comment for.
        public let id: String

        public init(comment: String? = nil, id: String) {
            self.comment = comment
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.comment, name: "comment", parent: name, max: 256)
            try self.validate(self.id, name: "id", parent: name, max: 32)
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
        }
    }

    public struct UpdateHostedZoneCommentResponse: AWSDecodableShape {
        /// A complex type that contains the response to the UpdateHostedZoneComment
        /// 			request.
        public let hostedZone: HostedZone

        public init(hostedZone: HostedZone) {
            self.hostedZone = hostedZone
        }

        private enum CodingKeys: String, CodingKey {
            case hostedZone = "HostedZone"
        }
    }

    public struct UpdateTrafficPolicyCommentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "version", location: .uri("Version"))
        ]

        /// The new comment for the specified traffic policy and version.
        public let comment: String
        /// The value of Id for the traffic policy that you want to update the
        /// 			comment for.
        public let id: String
        /// The value of Version for the traffic policy that you want to update the
        /// 			comment for.
        public let version: Int

        public init(comment: String, id: String, version: Int) {
            self.comment = comment
            self.id = id
            self.version = version
        }

        public func validate(name: String) throws {
            try self.validate(self.comment, name: "comment", parent: name, max: 1024)
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
            try self.validate(self.version, name: "version", parent: name, max: 1000)
            try self.validate(self.version, name: "version", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "Comment"
        }
    }

    public struct UpdateTrafficPolicyCommentResponse: AWSDecodableShape {
        /// A complex type that contains settings for the specified traffic policy.
        public let trafficPolicy: TrafficPolicy

        public init(trafficPolicy: TrafficPolicy) {
            self.trafficPolicy = trafficPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case trafficPolicy = "TrafficPolicy"
        }
    }

    public struct UpdateTrafficPolicyInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the traffic policy instance that you want to update.
        public let id: String
        /// The ID of the traffic policy that you want Amazon Route 53 to use to update resource
        /// 			record sets for the specified traffic policy instance.
        public let trafficPolicyId: String
        /// The version of the traffic policy that you want Amazon Route 53 to use to update
        /// 			resource record sets for the specified traffic policy instance.
        public let trafficPolicyVersion: Int
        /// The TTL that you want Amazon Route 53 to assign to all of the updated resource record
        /// 			sets.
        public let ttl: Int64

        public init(id: String, trafficPolicyId: String, trafficPolicyVersion: Int, ttl: Int64) {
            self.id = id
            self.trafficPolicyId = trafficPolicyId
            self.trafficPolicyVersion = trafficPolicyVersion
            self.ttl = ttl
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 1)
            try self.validate(self.trafficPolicyId, name: "trafficPolicyId", parent: name, max: 36)
            try self.validate(self.trafficPolicyId, name: "trafficPolicyId", parent: name, min: 1)
            try self.validate(self.trafficPolicyVersion, name: "trafficPolicyVersion", parent: name, max: 1000)
            try self.validate(self.trafficPolicyVersion, name: "trafficPolicyVersion", parent: name, min: 1)
            try self.validate(self.ttl, name: "ttl", parent: name, max: 2_147_483_647)
            try self.validate(self.ttl, name: "ttl", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case trafficPolicyId = "TrafficPolicyId"
            case trafficPolicyVersion = "TrafficPolicyVersion"
            case ttl = "TTL"
        }
    }

    public struct UpdateTrafficPolicyInstanceResponse: AWSDecodableShape {
        /// A complex type that contains settings for the updated traffic policy instance.
        public let trafficPolicyInstance: TrafficPolicyInstance

        public init(trafficPolicyInstance: TrafficPolicyInstance) {
            self.trafficPolicyInstance = trafficPolicyInstance
        }

        private enum CodingKeys: String, CodingKey {
            case trafficPolicyInstance = "TrafficPolicyInstance"
        }
    }

    public struct VPC: AWSEncodableShape & AWSDecodableShape {
        public let vpcId: String?
        /// (Private hosted zones only) The region that an Amazon VPC was created
        /// 			in.
        public let vpcRegion: VPCRegion?

        public init(vpcId: String? = nil, vpcRegion: VPCRegion? = nil) {
            self.vpcId = vpcId
            self.vpcRegion = vpcRegion
        }

        public func validate(name: String) throws {
            try self.validate(self.vpcId, name: "vpcId", parent: name, max: 1024)
        }

        private enum CodingKeys: String, CodingKey {
            case vpcId = "VPCId"
            case vpcRegion = "VPCRegion"
        }
    }
}

// MARK: - Errors

/// Error enum for Route53
public struct Route53ErrorType: AWSErrorType {
    enum Code: String {
        case cidrBlockInUseException = "CidrBlockInUseException"
        case cidrCollectionAlreadyExistsException = "CidrCollectionAlreadyExistsException"
        case cidrCollectionInUseException = "CidrCollectionInUseException"
        case cidrCollectionVersionMismatchException = "CidrCollectionVersionMismatchException"
        case concurrentModification = "ConcurrentModification"
        case conflictingDomainExists = "ConflictingDomainExists"
        case conflictingTypes = "ConflictingTypes"
        case delegationSetAlreadyCreated = "DelegationSetAlreadyCreated"
        case delegationSetAlreadyReusable = "DelegationSetAlreadyReusable"
        case delegationSetInUse = "DelegationSetInUse"
        case delegationSetNotAvailable = "DelegationSetNotAvailable"
        case delegationSetNotReusable = "DelegationSetNotReusable"
        case dnssecNotFound = "DNSSECNotFound"
        case healthCheckAlreadyExists = "HealthCheckAlreadyExists"
        case healthCheckInUse = "HealthCheckInUse"
        case healthCheckVersionMismatch = "HealthCheckVersionMismatch"
        case hostedZoneAlreadyExists = "HostedZoneAlreadyExists"
        case hostedZoneNotEmpty = "HostedZoneNotEmpty"
        case hostedZoneNotFound = "HostedZoneNotFound"
        case hostedZoneNotPrivate = "HostedZoneNotPrivate"
        case hostedZonePartiallyDelegated = "HostedZonePartiallyDelegated"
        case incompatibleVersion = "IncompatibleVersion"
        case insufficientCloudWatchLogsResourcePolicy = "InsufficientCloudWatchLogsResourcePolicy"
        case invalidArgument = "InvalidArgument"
        case invalidChangeBatch = "InvalidChangeBatch"
        case invalidDomainName = "InvalidDomainName"
        case invalidInput = "InvalidInput"
        case invalidKMSArn = "InvalidKMSArn"
        case invalidKeySigningKeyName = "InvalidKeySigningKeyName"
        case invalidKeySigningKeyStatus = "InvalidKeySigningKeyStatus"
        case invalidPaginationToken = "InvalidPaginationToken"
        case invalidSigningStatus = "InvalidSigningStatus"
        case invalidTrafficPolicyDocument = "InvalidTrafficPolicyDocument"
        case invalidVPCId = "InvalidVPCId"
        case keySigningKeyAlreadyExists = "KeySigningKeyAlreadyExists"
        case keySigningKeyInParentDSRecord = "KeySigningKeyInParentDSRecord"
        case keySigningKeyInUse = "KeySigningKeyInUse"
        case keySigningKeyWithActiveStatusNotFound = "KeySigningKeyWithActiveStatusNotFound"
        case lastVPCAssociation = "LastVPCAssociation"
        case limitsExceeded = "LimitsExceeded"
        case noSuchChange = "NoSuchChange"
        case noSuchCidrCollectionException = "NoSuchCidrCollectionException"
        case noSuchCidrLocationException = "NoSuchCidrLocationException"
        case noSuchCloudWatchLogsLogGroup = "NoSuchCloudWatchLogsLogGroup"
        case noSuchDelegationSet = "NoSuchDelegationSet"
        case noSuchGeoLocation = "NoSuchGeoLocation"
        case noSuchHealthCheck = "NoSuchHealthCheck"
        case noSuchHostedZone = "NoSuchHostedZone"
        case noSuchKeySigningKey = "NoSuchKeySigningKey"
        case noSuchQueryLoggingConfig = "NoSuchQueryLoggingConfig"
        case noSuchTrafficPolicy = "NoSuchTrafficPolicy"
        case noSuchTrafficPolicyInstance = "NoSuchTrafficPolicyInstance"
        case notAuthorizedException = "NotAuthorizedException"
        case priorRequestNotComplete = "PriorRequestNotComplete"
        case publicZoneVPCAssociation = "PublicZoneVPCAssociation"
        case queryLoggingConfigAlreadyExists = "QueryLoggingConfigAlreadyExists"
        case throttlingException = "ThrottlingException"
        case tooManyHealthChecks = "TooManyHealthChecks"
        case tooManyHostedZones = "TooManyHostedZones"
        case tooManyKeySigningKeys = "TooManyKeySigningKeys"
        case tooManyTrafficPolicies = "TooManyTrafficPolicies"
        case tooManyTrafficPolicyInstances = "TooManyTrafficPolicyInstances"
        case tooManyTrafficPolicyVersionsForCurrentPolicy = "TooManyTrafficPolicyVersionsForCurrentPolicy"
        case tooManyVPCAssociationAuthorizations = "TooManyVPCAssociationAuthorizations"
        case trafficPolicyAlreadyExists = "TrafficPolicyAlreadyExists"
        case trafficPolicyInUse = "TrafficPolicyInUse"
        case trafficPolicyInstanceAlreadyExists = "TrafficPolicyInstanceAlreadyExists"
        case vpcAssociationAuthorizationNotFound = "VPCAssociationAuthorizationNotFound"
        case vpcAssociationNotFound = "VPCAssociationNotFound"
    }

    private let error: Code
    public let context: AWSErrorContext?

    /// initialize Route53
    public init?(errorCode: String, context: AWSErrorContext) {
        guard let error = Code(rawValue: errorCode) else { return nil }
        self.error = error
        self.context = context
    }

    internal init(_ error: Code) {
        self.error = error
        self.context = nil
    }

    /// return error code string
    public var errorCode: String { self.error.rawValue }

    /// This CIDR block is already in use.
    public static var cidrBlockInUseException: Self { .init(.cidrBlockInUseException) }
    /// A CIDR collection with this name and a different caller reference already exists in this account.
    public static var cidrCollectionAlreadyExistsException: Self { .init(.cidrCollectionAlreadyExistsException) }
    /// This CIDR collection is in use, and isn&#39;t empty.
    public static var cidrCollectionInUseException: Self { .init(.cidrCollectionInUseException) }
    /// The CIDR collection version you provided, doesn&#39;t match the one in the
    /// 				ListCidrCollections operation.
    public static var cidrCollectionVersionMismatchException: Self { .init(.cidrCollectionVersionMismatchException) }
    /// Another user submitted a request to create, update, or delete the object at the same
    /// 			time that you did. Retry the request.
    public static var concurrentModification: Self { .init(.concurrentModification) }
    /// The cause of this error depends on the operation that you&#39;re performing:
    ///
    /// 				            Create a public hosted zone: Two hosted zones
    /// 					that have the same name or that have a parent/child relationship (example.com
    /// 					and test.example.com) can&#39;t have any common name servers. You tried to create a
    /// 					hosted zone that has the same name as an existing hosted zone or that&#39;s the
    /// 					parent or child of an existing hosted zone, and you specified a delegation set
    /// 					that shares one or more name servers with the existing hosted zone. For more
    /// 					information, see CreateReusableDelegationSet.
    ///
    /// 				            Create a private hosted zone: A hosted zone
    /// 					with the specified name already exists and is already associated with the Amazon
    /// 					VPC that you specified.
    ///
    /// 				            Associate VPCs with a private hosted zone:
    /// 					The VPC that you specified is already associated with another hosted zone that
    /// 					has the same name.
    ///
    public static var conflictingDomainExists: Self { .init(.conflictingDomainExists) }
    /// You tried to update a traffic policy instance by using a traffic policy version that
    /// 			has a different DNS type than the current type for the instance. You specified the type
    /// 			in the JSON document in the CreateTrafficPolicy or
    /// 				CreateTrafficPolicyVersionrequest.
    public static var conflictingTypes: Self { .init(.conflictingTypes) }
    /// A delegation set with the same owner and caller reference combination has already been
    /// 			created.
    public static var delegationSetAlreadyCreated: Self { .init(.delegationSetAlreadyCreated) }
    /// The specified delegation set has already been marked as reusable.
    public static var delegationSetAlreadyReusable: Self { .init(.delegationSetAlreadyReusable) }
    /// The specified delegation contains associated hosted zones which must be deleted before
    /// 			the reusable delegation set can be deleted.
    public static var delegationSetInUse: Self { .init(.delegationSetInUse) }
    /// You can create a hosted zone that has the same name as an existing hosted zone
    /// 			(example.com is common), but there is a limit to the number of hosted zones that have
    /// 			the same name. If you get this error, Amazon Route 53 has reached that limit. If you own
    /// 			the domain name and Route 53 generates this error, contact Customer Support.
    public static var delegationSetNotAvailable: Self { .init(.delegationSetNotAvailable) }
    /// A reusable delegation set with the specified ID does not exist.
    public static var delegationSetNotReusable: Self { .init(.delegationSetNotReusable) }
    /// The hosted zone doesn&#39;t have any DNSSEC resources.
    public static var dnssecNotFound: Self { .init(.dnssecNotFound) }
    ///  The health check you&#39;re attempting to create already exists. Amazon Route 53 returns
    /// 			this error when you submit a request that has the following values:
    ///
    /// 				           The same value for CallerReference as an existing health check,
    /// 					and one or more values that differ from the existing health check that has the
    /// 					same caller reference.
    ///
    /// 				           The same value for CallerReference as a health check that you
    /// 					created and later deleted, regardless of the other settings in the
    /// 					request.
    ///
    public static var healthCheckAlreadyExists: Self { .init(.healthCheckAlreadyExists) }
    /// This error code is not in use.
    public static var healthCheckInUse: Self { .init(.healthCheckInUse) }
    /// The value of HealthCheckVersion in the request doesn&#39;t match the value of
    /// 				HealthCheckVersion in the health check.
    public static var healthCheckVersionMismatch: Self { .init(.healthCheckVersionMismatch) }
    /// The hosted zone you&#39;re trying to create already exists. Amazon Route 53 returns this
    /// 			error when a hosted zone has already been created with the specified
    /// 				CallerReference.
    public static var hostedZoneAlreadyExists: Self { .init(.hostedZoneAlreadyExists) }
    /// The hosted zone contains resource records that are not SOA or NS records.
    public static var hostedZoneNotEmpty: Self { .init(.hostedZoneNotEmpty) }
    /// The specified HostedZone can&#39;t be found.
    public static var hostedZoneNotFound: Self { .init(.hostedZoneNotFound) }
    /// The specified hosted zone is a public hosted zone, not a private hosted zone.
    public static var hostedZoneNotPrivate: Self { .init(.hostedZoneNotPrivate) }
    /// The hosted zone nameservers don&#39;t match the parent nameservers. The hosted zone and
    /// 			parent must have the same nameservers.
    public static var hostedZonePartiallyDelegated: Self { .init(.hostedZonePartiallyDelegated) }
    /// The resource you&#39;re trying to access is unsupported on this Amazon Route 53
    /// 			endpoint.
    public static var incompatibleVersion: Self { .init(.incompatibleVersion) }
    /// Amazon Route 53 doesn&#39;t have the permissions required to create log streams and send
    /// 			query logs to log streams. Possible causes include the following:
    ///
    /// 				           There is no resource policy that specifies the log group ARN in the value for
    /// 						Resource.
    ///
    /// 				           The resource policy that includes the log group ARN in the value for
    /// 						Resource doesn&#39;t have the necessary permissions.
    ///
    /// 				           The resource policy hasn&#39;t finished propagating yet.
    ///
    /// 				           The Key management service (KMS) key you specified doesn’t exist or it can’t
    /// 					be used with the log group associated with query log. Update or provide a
    /// 					resource policy to grant permissions for the KMS key.
    /// 			           The Key management service (KMS) key you specified is marked as
    /// 				disabled for the log group associated with query log. Update or provide
    /// 				a resource policy to grant permissions for the KMS key.
    ///
    public static var insufficientCloudWatchLogsResourcePolicy: Self { .init(.insufficientCloudWatchLogsResourcePolicy) }
    /// Parameter name is not valid.
    public static var invalidArgument: Self { .init(.invalidArgument) }
    /// This exception contains a list of messages that might contain one or more error
    /// 			messages. Each error message indicates one error in the change batch.
    public static var invalidChangeBatch: Self { .init(.invalidChangeBatch) }
    /// The specified domain name is not valid.
    public static var invalidDomainName: Self { .init(.invalidDomainName) }
    /// The input is not valid.
    public static var invalidInput: Self { .init(.invalidInput) }
    /// The KeyManagementServiceArn that you specified isn&#39;t valid to use with DNSSEC
    /// 			signing.
    public static var invalidKMSArn: Self { .init(.invalidKMSArn) }
    /// The key-signing key (KSK) name that you specified isn&#39;t a valid name.
    public static var invalidKeySigningKeyName: Self { .init(.invalidKeySigningKeyName) }
    /// The key-signing key (KSK) status isn&#39;t valid or another KSK has the status
    /// 				INTERNAL_FAILURE.
    public static var invalidKeySigningKeyStatus: Self { .init(.invalidKeySigningKeyStatus) }
    /// The value that you specified to get the second or subsequent page of results is
    /// 			invalid.
    public static var invalidPaginationToken: Self { .init(.invalidPaginationToken) }
    /// Your hosted zone status isn&#39;t valid for this operation. In the hosted zone, change the
    /// 			status to enable DNSSEC or disable DNSSEC.
    public static var invalidSigningStatus: Self { .init(.invalidSigningStatus) }
    /// The format of the traffic policy document that you specified in the
    /// 				Document element is not valid.
    public static var invalidTrafficPolicyDocument: Self { .init(.invalidTrafficPolicyDocument) }
    /// The VPC ID that you specified either isn&#39;t a valid ID or the current account is not
    /// 			authorized to access this VPC.
    public static var invalidVPCId: Self { .init(.invalidVPCId) }
    /// You&#39;ve already created a key-signing key (KSK) with this name or with the same customer managed key ARN.
    public static var keySigningKeyAlreadyExists: Self { .init(.keySigningKeyAlreadyExists) }
    /// The key-signing key (KSK) is specified in a parent DS record.
    public static var keySigningKeyInParentDSRecord: Self { .init(.keySigningKeyInParentDSRecord) }
    /// The key-signing key (KSK) that you specified can&#39;t be deactivated because it&#39;s the
    /// 			only KSK for a currently-enabled DNSSEC. Disable DNSSEC signing, or add or enable
    /// 			another KSK.
    public static var keySigningKeyInUse: Self { .init(.keySigningKeyInUse) }
    /// A key-signing key (KSK) with ACTIVE status wasn&#39;t found.
    public static var keySigningKeyWithActiveStatusNotFound: Self { .init(.keySigningKeyWithActiveStatusNotFound) }
    /// The VPC that you&#39;re trying to disassociate from the private hosted zone is the last
    /// 			VPC that is associated with the hosted zone. Amazon Route 53 doesn&#39;t support
    /// 			disassociating the last VPC from a hosted zone.
    public static var lastVPCAssociation: Self { .init(.lastVPCAssociation) }
    /// This operation can&#39;t be completed because the current account has reached the
    /// 			limit on the resource you are trying to create. To request a higher limit, create a case with the Amazon Web Services Support
    /// 			Center.
    public static var limitsExceeded: Self { .init(.limitsExceeded) }
    /// A change with the specified change ID does not exist.
    public static var noSuchChange: Self { .init(.noSuchChange) }
    /// The CIDR collection you specified, doesn&#39;t exist.
    public static var noSuchCidrCollectionException: Self { .init(.noSuchCidrCollectionException) }
    /// The CIDR collection location doesn&#39;t match any locations in your account.
    public static var noSuchCidrLocationException: Self { .init(.noSuchCidrLocationException) }
    /// There is no CloudWatch Logs log group with the specified ARN.
    public static var noSuchCloudWatchLogsLogGroup: Self { .init(.noSuchCloudWatchLogsLogGroup) }
    /// A reusable delegation set with the specified ID does not exist.
    public static var noSuchDelegationSet: Self { .init(.noSuchDelegationSet) }
    /// Amazon Route 53 doesn&#39;t support the specified geographic location. For a list of
    /// 			supported geolocation codes, see the GeoLocation data
    /// 			type.
    public static var noSuchGeoLocation: Self { .init(.noSuchGeoLocation) }
    /// No health check exists with the specified ID.
    public static var noSuchHealthCheck: Self { .init(.noSuchHealthCheck) }
    /// No hosted zone exists with the ID that you specified.
    public static var noSuchHostedZone: Self { .init(.noSuchHostedZone) }
    /// The specified key-signing key (KSK) doesn&#39;t exist.
    public static var noSuchKeySigningKey: Self { .init(.noSuchKeySigningKey) }
    /// There is no DNS query logging configuration with the specified ID.
    public static var noSuchQueryLoggingConfig: Self { .init(.noSuchQueryLoggingConfig) }
    /// No traffic policy exists with the specified ID.
    public static var noSuchTrafficPolicy: Self { .init(.noSuchTrafficPolicy) }
    /// No traffic policy instance exists with the specified ID.
    public static var noSuchTrafficPolicyInstance: Self { .init(.noSuchTrafficPolicyInstance) }
    /// Associating the specified VPC with the specified hosted zone has not been
    /// 			authorized.
    public static var notAuthorizedException: Self { .init(.notAuthorizedException) }
    /// If Amazon Route 53 can&#39;t process a request before the next request arrives, it will
    /// 			reject subsequent requests for the same hosted zone and return an HTTP 400
    /// 				error (Bad request). If Route 53 returns this error repeatedly
    /// 			for the same request, we recommend that you wait, in intervals of increasing duration,
    /// 			before you try the request again.
    public static var priorRequestNotComplete: Self { .init(.priorRequestNotComplete) }
    /// You&#39;re trying to associate a VPC with a public hosted zone. Amazon Route 53 doesn&#39;t
    /// 			support associating a VPC with a public hosted zone.
    public static var publicZoneVPCAssociation: Self { .init(.publicZoneVPCAssociation) }
    /// You can create only one query logging configuration for a hosted zone, and a query
    /// 			logging configuration already exists for this hosted zone.
    public static var queryLoggingConfigAlreadyExists: Self { .init(.queryLoggingConfigAlreadyExists) }
    /// The limit on the number of requests per second was exceeded.
    public static var throttlingException: Self { .init(.throttlingException) }
    /// This health check can&#39;t be created because the current account has reached the limit
    /// 			on the number of active health checks.
    /// 		       For information about default limits, see Limits in the
    /// 				Amazon Route 53 Developer Guide.
    /// 		       For information about how to get the current limit for an account, see GetAccountLimit. To request a higher limit, create a case with the Amazon Web Services Support
    /// 			Center.
    /// 		       You have reached the maximum number of active health checks for an Amazon Web Services account. To request a higher limit, create a case with the Amazon Web Services Support
    /// 			Center.
    public static var tooManyHealthChecks: Self { .init(.tooManyHealthChecks) }
    /// This operation can&#39;t be completed either because the current account has reached the
    /// 			limit on the number of hosted zones or because you&#39;ve reached the limit on the number of
    /// 			hosted zones that can be associated with a reusable delegation set.
    /// 		       For information about default limits, see Limits in the
    /// 				Amazon Route 53 Developer Guide.
    /// 		       To get the current limit on hosted zones that can be created by an account, see GetAccountLimit.
    /// 		       To get the current limit on hosted zones that can be associated with a reusable
    /// 			delegation set, see GetReusableDelegationSetLimit.
    /// 		       To request a higher limit, create a
    /// 				case with the Amazon Web Services Support Center.
    public static var tooManyHostedZones: Self { .init(.tooManyHostedZones) }
    /// You&#39;ve reached the limit for the number of key-signing keys (KSKs). Remove at least
    /// 			one KSK, and then try again.
    public static var tooManyKeySigningKeys: Self { .init(.tooManyKeySigningKeys) }
    /// This traffic policy can&#39;t be created because the current account has reached the limit
    /// 			on the number of traffic policies.
    /// 		       For information about default limits, see Limits in the
    /// 				Amazon Route 53 Developer Guide.
    /// 		       To get the current limit for an account, see GetAccountLimit.
    /// 		       To request a higher limit, create a
    /// 				case with the Amazon Web Services Support Center.
    public static var tooManyTrafficPolicies: Self { .init(.tooManyTrafficPolicies) }
    /// This traffic policy instance can&#39;t be created because the current account has reached
    /// 			the limit on the number of traffic policy instances.
    /// 		       For information about default limits, see Limits in the
    /// 				Amazon Route 53 Developer Guide.
    /// 		       For information about how to get the current limit for an account, see GetAccountLimit.
    /// 		       To request a higher limit, create a
    /// 				case with the Amazon Web Services Support Center.
    public static var tooManyTrafficPolicyInstances: Self { .init(.tooManyTrafficPolicyInstances) }
    /// This traffic policy version can&#39;t be created because you&#39;ve reached the limit of 1000
    /// 			on the number of versions that you can create for the current traffic policy.
    /// 		       To create more traffic policy versions, you can use GetTrafficPolicy
    /// 			to get the traffic policy document for a specified traffic policy version, and then use
    /// 				CreateTrafficPolicy to create a new traffic policy using the traffic policy
    /// 			document.
    public static var tooManyTrafficPolicyVersionsForCurrentPolicy: Self { .init(.tooManyTrafficPolicyVersionsForCurrentPolicy) }
    /// You&#39;ve created the maximum number of authorizations that can be created for the
    /// 			specified hosted zone. To authorize another VPC to be associated with the hosted zone,
    /// 			submit a DeleteVPCAssociationAuthorization request to remove an existing
    /// 			authorization. To get a list of existing authorizations, submit a
    /// 				ListVPCAssociationAuthorizations request.
    public static var tooManyVPCAssociationAuthorizations: Self { .init(.tooManyVPCAssociationAuthorizations) }
    /// A traffic policy that has the same value for Name already exists.
    public static var trafficPolicyAlreadyExists: Self { .init(.trafficPolicyAlreadyExists) }
    /// One or more traffic policy instances were created by using the specified traffic
    /// 			policy.
    public static var trafficPolicyInUse: Self { .init(.trafficPolicyInUse) }
    /// There is already a traffic policy instance with the specified ID.
    public static var trafficPolicyInstanceAlreadyExists: Self { .init(.trafficPolicyInstanceAlreadyExists) }
    /// The VPC that you specified is not authorized to be associated with the hosted
    /// 			zone.
    public static var vpcAssociationAuthorizationNotFound: Self { .init(.vpcAssociationAuthorizationNotFound) }
    /// The specified VPC and hosted zone are not currently associated.
    public static var vpcAssociationNotFound: Self { .init(.vpcAssociationNotFound) }
}

extension Route53ErrorType: Equatable {
    public static func == (lhs: Route53ErrorType, rhs: Route53ErrorType) -> Bool {
        lhs.error == rhs.error
    }
}

extension Route53ErrorType: CustomStringConvertible {
    public var description: String {
        return "\(self.error.rawValue): \(self.message ?? "")"
    }
}
